aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3/include/std/regex
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2021-08-02 18:34:19 +0100
committerJonathan Wakely <jwakely@redhat.com>2021-08-03 15:24:52 +0100
commite9f64fff64d83f5fcaa9ff17f1688490f75bdcb7 (patch)
tree92ee44a5f8db749c9b67bbd1add54b966ac17eb2 /libstdc++-v3/include/std/regex
parent98d7f305d5081bc91c16b9d2b4d62196b86bca86 (diff)
downloadgcc-e9f64fff64d83f5fcaa9ff17f1688490f75bdcb7.zip
gcc-e9f64fff64d83f5fcaa9ff17f1688490f75bdcb7.tar.gz
gcc-e9f64fff64d83f5fcaa9ff17f1688490f75bdcb7.tar.bz2
libstdc++: Reduce header dependencies in <regex>
This reduces the size of <regex> a little. This is one of the largest and slowest headers in the library. By using <bits/stl_algobase.h> and <bits/stl_algo.h> instead of <algorithm> we don't need to parse all the parallel algorithms and std::ranges:: algorithms that are not needed by <regex>. Similarly, by using <bits/stl_tree.h> and <bits/stl_map.h> instead of <map> we don't need to parse the definition of std::multimap. The _State_info type is not movable or copyable, so doesn't need to use std::unique_ptr<bool[]> to manage a bitset, we can just delete it in the destructor. It would use a lot less space if we used a bitset instead, but that would be an ABI break. We could do it for the versioned namespace, but this patch doesn't do so. For future reference, using vector<bool> would work, but would increase sizeof(_State_info) by two pointers, because it's three times as large as unique_ptr<bool[]>. We can't use std::bitset because the length isn't constant. We want a bitset with a non-constant but fixed length. Signed-off-by: Jonathan Wakely <jwakely@redhat.com> libstdc++-v3/ChangeLog: * include/bits/regex_executor.h (_State_info): Replace unique_ptr<bool[]> with array of bool. * include/bits/regex_executor.tcc: Likewise. * include/bits/regex_scanner.tcc: Replace std::strchr with __builtin_strchr. * include/std/regex: Replace standard headers with smaller internal ones. * testsuite/28_regex/traits/char/lookup_classname.cc: Include <string.h> for strlen. * testsuite/28_regex/traits/char/lookup_collatename.cc: Likewise.
Diffstat (limited to 'libstdc++-v3/include/std/regex')
-rw-r--r--libstdc++-v3/include/std/regex18
1 files changed, 9 insertions, 9 deletions
diff --git a/libstdc++-v3/include/std/regex b/libstdc++-v3/include/std/regex
index e623a6e..04fb8b2 100644
--- a/libstdc++-v3/include/std/regex
+++ b/libstdc++-v3/include/std/regex
@@ -35,26 +35,26 @@
# include <bits/c++0x_warning.h>
#else
-#include <algorithm>
#include <bitset>
-#ifdef _GLIBCXX_DEBUG
-# include <iosfwd>
-#endif
-#include <iterator>
#include <locale>
-#include <memory>
#include <sstream>
#include <stack>
#include <stdexcept>
#include <string>
-#include <vector>
-#include <map>
-#include <cstring>
#include <ext/aligned_buffer.h>
#include <ext/numeric_traits.h>
+#include <bits/shared_ptr.h>
#include <bits/std_function.h>
+#include <bits/stl_algobase.h> // std::copy, std::fill_n
+#include <bits/stl_algo.h> // std::sort, std::unique
+#include <bits/stl_iterator_base_types.h> // std::iterator_traits
#include <bits/stl_pair.h>
+#include <bits/stl_tree.h>
+#include <bits/stl_map.h>
+#include <bits/stl_vector.h>
+#include <bits/stl_bvector.h>
+#include <bits/vector.tcc>
#include <bits/regex_constants.h>
#include <bits/regex_error.h>
#include <bits/regex_automaton.h>