| 1870 | } |
| 1871 | |
| 1872 | void VRegistry::setModules(const char* modules) { |
| 1873 | base::threading::ScopedLock scopedLock(lock()); |
| 1874 | auto addSuffix = [](std::stringstream& ss, const char* sfx, const char* prev) { |
| 1875 | if (prev != nullptr && base::utils::Str::endsWith(ss.str(), std::string(prev))) { |
| 1876 | std::string chr(ss.str().substr(0, ss.str().size() - strlen(prev))); |
| 1877 | ss.str(std::string("")); |
| 1878 | ss << chr; |
| 1879 | } |
| 1880 | if (base::utils::Str::endsWith(ss.str(), std::string(sfx))) { |
| 1881 | std::string chr(ss.str().substr(0, ss.str().size() - strlen(sfx))); |
| 1882 | ss.str(std::string("")); |
| 1883 | ss << chr; |
| 1884 | } |
| 1885 | ss << sfx; |
| 1886 | }; |
| 1887 | auto insert = [&](std::stringstream& ss, base::type::VerboseLevel level) { |
| 1888 | if (!base::utils::hasFlag(LoggingFlag::DisableVModulesExtensions, *m_pFlags)) { |
| 1889 | addSuffix(ss, ".h", nullptr); |
| 1890 | m_modules.insert(std::make_pair(ss.str(), level)); |
| 1891 | addSuffix(ss, ".c", ".h"); |
| 1892 | m_modules.insert(std::make_pair(ss.str(), level)); |
| 1893 | addSuffix(ss, ".cpp", ".c"); |
| 1894 | m_modules.insert(std::make_pair(ss.str(), level)); |
| 1895 | addSuffix(ss, ".cc", ".cpp"); |
| 1896 | m_modules.insert(std::make_pair(ss.str(), level)); |
| 1897 | addSuffix(ss, ".cxx", ".cc"); |
| 1898 | m_modules.insert(std::make_pair(ss.str(), level)); |
| 1899 | addSuffix(ss, ".-inl.h", ".cxx"); |
| 1900 | m_modules.insert(std::make_pair(ss.str(), level)); |
| 1901 | addSuffix(ss, ".hxx", ".-inl.h"); |
| 1902 | m_modules.insert(std::make_pair(ss.str(), level)); |
| 1903 | addSuffix(ss, ".hpp", ".hxx"); |
| 1904 | m_modules.insert(std::make_pair(ss.str(), level)); |
| 1905 | addSuffix(ss, ".hh", ".hpp"); |
| 1906 | } |
| 1907 | m_modules.insert(std::make_pair(ss.str(), level)); |
| 1908 | }; |
| 1909 | bool isMod = true; |
| 1910 | bool isLevel = false; |
| 1911 | std::stringstream ss; |
| 1912 | int level = -1; |
| 1913 | for (; *modules; ++modules) { |
| 1914 | switch (*modules) { |
| 1915 | case '=': |
| 1916 | isLevel = true; |
| 1917 | isMod = false; |
| 1918 | break; |
| 1919 | case ',': |
| 1920 | isLevel = false; |
| 1921 | isMod = true; |
| 1922 | if (!ss.str().empty() && level != -1) { |
| 1923 | insert(ss, static_cast<base::type::VerboseLevel>(level)); |
| 1924 | ss.str(std::string("")); |
| 1925 | level = -1; |
| 1926 | } |
| 1927 | break; |
| 1928 | default: |
| 1929 | if (isMod) { |
no test coverage detected