This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[v3] bits/memoryfwd.h
- From: Benjamin De Kosnik <bkoz at redhat dot com>
- To: libstdc++ at gcc dot gnu dot org, gcc-patches at gcc dot gnu dot org
- Date: Fri, 8 Mar 2013 13:45:33 -0800
- Subject: [v3] bits/memoryfwd.h
Hey y'all.
I noticed the repeated, repeated, repeated use of
std::allocator forward decls as I was trying to debug some doxygen
output.
Clearly, it's past time for a memory forward header, like
bits/stringfwd.h. The following patch implements this. Perhaps some of
the other headers can now be optimized because of this, but that was
not my primary focus. Instead, I was just trying to come up with the
smallest patch that was semantically equivalent to existing trunk.
tested x86/linux
-benjamin
2013-03-08 Benjamin Kosnik <bkoz@redhat.com>
* include/bits/memoryfwd.h: New. Centralize forward declarations.
* include/bits/algorithmfwd.h: Consistent comments.
* include/bits/localefwd.h: Same.
* include/ext/vstring_fwd.h: Same.
* include/parallel/algorithmfwd.h: Same.
* include/parallel/numericfwd.h: Same.
* include/std/iosfwd: Same.
* include/bits/alloc_traits.h: Include memoryfwd.h, remove allocator
forward decl.
* include/ext/alloc_traits.h: Remove allocator forward decl.
* include/bits/stl_construct.h: Same.
* include/bits/stringfwd.h: Include memoryfwd.h, remove allocator
forward decl. Consistent comments.
* doc/doxygen/user.cfg.in (TEMPLATE_RELATIONS): To NO.
* include/Makefile.am (bits_headers): Add memoryfwd.h.
* include/Makefile.in: Regenerate.
* configure: Same.
* include/bits/vector.tcc (vector<>operator=(const vector<>&):
diff --git a/libstdc++-v3/doc/doxygen/user.cfg.in b/libstdc++-v3/doc/doxygen/user.cfg.in
index 4a3afc4..45efb63 100644
--- a/libstdc++-v3/doc/doxygen/user.cfg.in
+++ b/libstdc++-v3/doc/doxygen/user.cfg.in
@@ -1957,7 +1957,7 @@ UML_LIMIT_NUM_FIELDS = 10
# If set to YES, the inheritance and collaboration graphs will show the
# relations between templates and their instances.
-TEMPLATE_RELATIONS = YES
+TEMPLATE_RELATIONS = NO
# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
# tags are set to YES then doxygen will generate a graph for each documented
diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am
index 5342217..6bd3b43 100644
--- a/libstdc++-v3/include/Makefile.am
+++ b/libstdc++-v3/include/Makefile.am
@@ -113,6 +113,7 @@ bits_headers = \
${bits_srcdir}/locale_facets_nonio.tcc \
${bits_srcdir}/localefwd.h \
${bits_srcdir}/mask_array.h \
+ ${bits_srcdir}/memoryfwd.h \
${bits_srcdir}/move.h \
${bits_srcdir}/ostream.tcc \
${bits_srcdir}/ostream_insert.h \
diff --git a/libstdc++-v3/include/bits/algorithmfwd.h b/libstdc++-v3/include/bits/algorithmfwd.h
index 7b8448c..e6321b2 100644
--- a/libstdc++-v3/include/bits/algorithmfwd.h
+++ b/libstdc++-v3/include/bits/algorithmfwd.h
@@ -1,4 +1,4 @@
-// <algorithm> declarations -*- C++ -*-
+// <algorithm> Forward declarations -*- C++ -*-
// Copyright (C) 2007-2013 Free Software Foundation, Inc.
//
diff --git a/libstdc++-v3/include/bits/alloc_traits.h b/libstdc++-v3/include/bits/alloc_traits.h
index 26c64f2..33ea145 100644
--- a/libstdc++-v3/include/bits/alloc_traits.h
+++ b/libstdc++-v3/include/bits/alloc_traits.h
@@ -32,6 +32,7 @@
#if __cplusplus >= 201103L
+#include <bits/memoryfwd.h>
#include <bits/ptr_traits.h>
#include <ext/numeric_traits.h>
@@ -39,9 +40,6 @@ namespace std _GLIBCXX_VISIBILITY(default)
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
- template<typename _Tp>
- class allocator;
-
template<typename _Alloc, typename _Tp>
class __alloctr_rebind_helper
{
diff --git a/libstdc++-v3/include/bits/allocator.h b/libstdc++-v3/include/bits/allocator.h
index 97477fb..28df242 100644
--- a/libstdc++-v3/include/bits/allocator.h
+++ b/libstdc++-v3/include/bits/allocator.h
@@ -43,8 +43,8 @@
#ifndef _ALLOCATOR_H
#define _ALLOCATOR_H 1
-// Define the base class to std::allocator.
-#include <bits/c++allocator.h>
+#include <bits/c++allocator.h> // Define the base class to std::allocator.
+#include <bits/memoryfwd.h>
#if __cplusplus >= 201103L
#include <type_traits>
#endif
@@ -54,17 +54,10 @@ namespace std _GLIBCXX_VISIBILITY(default)
_GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
- * @defgroup allocators Allocators
- * @ingroup memory
- *
- * Classes encapsulating memory operations.
- *
- * @{
+ * @addtogroup allocators
+ * @{
*/
- template<typename _Tp>
- class allocator;
-
/// allocator<void> specialization.
template<>
class allocator<void>
@@ -150,13 +143,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
operator!=(const allocator<_Tp>&, const allocator<_Tp>&)
{ return false; }
- /// Declare uses_allocator so it can be specialized in \<queue\> etc.
- template<typename, typename>
- struct uses_allocator;
-
- /**
- * @}
- */
+ /// @} group allocator
// Inhibit implicit instantiations for required instantiations,
// which are defined via explicit instantiations elsewhere.
diff --git a/libstdc++-v3/include/bits/localefwd.h b/libstdc++-v3/include/bits/localefwd.h
index e0a233b..ca06dc1 100644
--- a/libstdc++-v3/include/bits/localefwd.h
+++ b/libstdc++-v3/include/bits/localefwd.h
@@ -1,4 +1,4 @@
-// Locale support -*- C++ -*-
+// <locale> Forward declarations -*- C++ -*-
// Copyright (C) 1997-2013 Free Software Foundation, Inc.
//
@@ -185,6 +185,6 @@ _GLIBCXX_END_NAMESPACE_LDBL
class messages_byname;
_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace
+} // namespace std
#endif
diff --git a/libstdc++-v3/include/bits/memoryfwd.h b/libstdc++-v3/include/bits/memoryfwd.h
new file mode 100644
index 0000000..7c85970
--- /dev/null
+++ b/libstdc++-v3/include/bits/memoryfwd.h
@@ -0,0 +1,78 @@
+// <memory> Forward declarations -*- C++ -*-
+
+// Copyright (C) 2001-2013 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/*
+ * Copyright (c) 1996-1997
+ * Silicon Graphics Computer Systems, Inc.
+ *
+ * Permission to use, copy, modify, distribute and sell this software
+ * and its documentation for any purpose is hereby granted without fee,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear
+ * in supporting documentation. Silicon Graphics makes no
+ * representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ */
+
+/** @file bits/memoryfwd.h
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{memory}
+ */
+
+#ifndef _MEMORYFWD_H
+#define _MEMORYFWD_H 1
+
+#pragma GCC system_header
+
+#include <bits/c++config.h>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ /**
+ * @defgroup allocators Allocators
+ * @ingroup memory
+ *
+ * Classes encapsulating memory operations.
+ *
+ * @{
+ */
+
+ template<typename>
+ class allocator;
+
+ template<>
+ class allocator<void>;
+
+ /// Declare uses_allocator so it can be specialized in \<queue\> etc.
+ template<typename, typename>
+ struct uses_allocator;
+
+ /// @} group memory
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace std
+
+#endif
diff --git a/libstdc++-v3/include/bits/stl_construct.h b/libstdc++-v3/include/bits/stl_construct.h
index 5dd5626..c1863e64 100644
--- a/libstdc++-v3/include/bits/stl_construct.h
+++ b/libstdc++-v3/include/bits/stl_construct.h
@@ -133,8 +133,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* destroy() even if _Tp has a trivial destructor.
*/
- template <typename _Tp> class allocator;
-
template<typename _ForwardIterator, typename _Allocator>
void
_Destroy(_ForwardIterator __first, _ForwardIterator __last,
@@ -154,7 +152,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace
+} // namespace std
#endif /* _STL_CONSTRUCT_H */
diff --git a/libstdc++-v3/include/bits/stringfwd.h b/libstdc++-v3/include/bits/stringfwd.h
index 5d5b83f..9601116 100644
--- a/libstdc++-v3/include/bits/stringfwd.h
+++ b/libstdc++-v3/include/bits/stringfwd.h
@@ -1,4 +1,4 @@
-// String support -*- C++ -*-
+// <string> Forward declarations -*- C++ -*-
// Copyright (C) 2001-2013 Free Software Foundation, Inc.
//
@@ -37,14 +37,12 @@
#pragma GCC system_header
#include <bits/c++config.h>
+#include <bits/memoryfwd.h>
namespace std _GLIBCXX_VISIBILITY(default)
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
- template<typename _Alloc>
- class allocator;
-
/**
* @defgroup strings Strings
*
diff --git a/libstdc++-v3/include/ext/alloc_traits.h b/libstdc++-v3/include/ext/alloc_traits.h
index 706bfd3..333473a 100644
--- a/libstdc++-v3/include/ext/alloc_traits.h
+++ b/libstdc++-v3/include/ext/alloc_traits.h
@@ -38,13 +38,6 @@
# include <bits/allocator.h> // for __alloc_swap
#endif
-namespace std _GLIBCXX_VISIBILITY(default)
-{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
- template<typename> struct allocator;
-_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace
-
namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
@@ -244,6 +237,6 @@ template<typename _Alloc>
};
_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace
+} // namespace std
#endif
diff --git a/libstdc++-v3/include/ext/vstring_fwd.h b/libstdc++-v3/include/ext/vstring_fwd.h
index 61bc2fe..b917e93 100644
--- a/libstdc++-v3/include/ext/vstring_fwd.h
+++ b/libstdc++-v3/include/ext/vstring_fwd.h
@@ -1,4 +1,4 @@
-// Versatile string forward -*- C++ -*-
+// <vstring.h> Forward declarations -*- C++ -*-
// Copyright (C) 2005-2013 Free Software Foundation, Inc.
//
diff --git a/libstdc++-v3/include/parallel/algorithmfwd.h b/libstdc++-v3/include/parallel/algorithmfwd.h
index 9706185..01a8a5a 100644
--- a/libstdc++-v3/include/parallel/algorithmfwd.h
+++ b/libstdc++-v3/include/parallel/algorithmfwd.h
@@ -1,4 +1,4 @@
-// <algorithm> parallel extensions -*- C++ -*-
+// <parallel/algorithm> Forward declarations -*- C++ -*-
// Copyright (C) 2007-2013 Free Software Foundation, Inc.
//
diff --git a/libstdc++-v3/include/parallel/numericfwd.h b/libstdc++-v3/include/parallel/numericfwd.h
index 1314169..6b3d2f1 100644
--- a/libstdc++-v3/include/parallel/numericfwd.h
+++ b/libstdc++-v3/include/parallel/numericfwd.h
@@ -1,4 +1,4 @@
-// <numeric> parallel extensions -*- C++ -*-
+// <parallel/numeric> Forward declarations -*- C++ -*-
// Copyright (C) 2007-2013 Free Software Foundation, Inc.
//
diff --git a/libstdc++-v3/include/std/iosfwd b/libstdc++-v3/include/std/iosfwd
index 156ed92..c5fe26d 100644
--- a/libstdc++-v3/include/std/iosfwd
+++ b/libstdc++-v3/include/std/iosfwd
@@ -1,4 +1,4 @@
-// Forwarding declarations -*- C++ -*-
+// <iosfwd> Forward declarations -*- C++ -*-
// Copyright (C) 1997-2013 Free Software Foundation, Inc.
//