Patchwork [v3] Untangle src/hash files

login
register
mail settings
Submitter Paolo Carlini
Date Sept. 10, 2010, 2:18 p.m.
Message ID <4C8A3E52.2080501@oracle.com>
Download mbox | patch
Permalink /patch/64396/
State New
Headers show

Comments

Paolo Carlini - Sept. 10, 2010, 2:18 p.m.
Hi,

this untangles the *.cc files dealing with the C++0x and TR1 hash
functions, which, as noticed by Matt, where making difficult changing
the C++0x one independently.

Tested x86_64-linux, committed.

Paolo.

//////////////////
2010-09-10  Paolo Carlini  <paolo.carlini@oracle.com>

	* src/hash-string-aux.cc: Remove. Move contents...
	* src/hash_tr1.cc: ... here.
	* src/compatibility-c++0x.cc: ... and here.

Patch

Index: src/hash-string-aux.cc
===================================================================
--- src/hash-string-aux.cc	(revision 164074)
+++ src/hash-string-aux.cc	(working copy)
@@ -1,48 +0,0 @@ 
-//  std::hash and std::tr1::hash definitions, string bits -*- C++ -*-
-
-// Copyright (C) 2007, 2008, 2009, 2010 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/>.
-
-#ifndef _GLIBCXX_LONG_DOUBLE_COMPAT_IMPL
-  template<>
-    size_t
-    hash<string>::operator()(string __s) const
-    { return _Fnv_hash::hash(__s.data(), __s.length()); }
-
-  template<>
-    size_t
-    hash<const string&>::operator()(const string& __s) const
-    { return _Fnv_hash::hash(__s.data(), __s.length()); }
-
-#ifdef _GLIBCXX_USE_WCHAR_T
-  template<>
-    size_t
-    hash<wstring>::operator()(wstring __s) const
-    { return _Fnv_hash::hash(__s.data(), __s.length() * sizeof(wchar_t)); }
-
-  template<>
-    size_t
-    hash<const wstring&>::operator()(const wstring& __s) const
-    { return _Fnv_hash::hash(__s.data(), __s.length() * sizeof(wchar_t)); }
-#endif
-
-#endif
Index: src/hash_tr1.cc
===================================================================
--- src/hash_tr1.cc	(revision 164074)
+++ src/hash_tr1.cc	(working copy)
@@ -30,6 +30,29 @@ 
   namespace tr1 
   {
 #include "hash-long-double-aux.cc"
-#include "hash-string-aux.cc"
+
+#ifndef _GLIBCXX_LONG_DOUBLE_COMPAT_IMPL
+  template<>
+    size_t
+    hash<string>::operator()(string __s) const
+    { return _Fnv_hash::hash(__s.data(), __s.length()); }
+
+  template<>
+    size_t
+    hash<const string&>::operator()(const string& __s) const
+    { return _Fnv_hash::hash(__s.data(), __s.length()); }
+
+#ifdef _GLIBCXX_USE_WCHAR_T
+  template<>
+    size_t
+    hash<wstring>::operator()(wstring __s) const
+    { return _Fnv_hash::hash(__s.data(), __s.length() * sizeof(wchar_t)); }
+
+  template<>
+    size_t
+    hash<const wstring&>::operator()(const wstring& __s) const
+    { return _Fnv_hash::hash(__s.data(), __s.length() * sizeof(wchar_t)); }
+#endif
+#endif
   }
 }
Index: src/compatibility-c++0x.cc
===================================================================
--- src/compatibility-c++0x.cc	(revision 164074)
+++ src/compatibility-c++0x.cc	(working copy)
@@ -50,10 +50,32 @@ 
   // We need these due to the symbols exported since GLIBCXX_3.4.10.
   // See libstdc++/41662 for details.
 
-#include "hash-string-aux.cc"
+#ifndef _GLIBCXX_LONG_DOUBLE_COMPAT_IMPL
+  template<>
+    size_t
+    hash<string>::operator()(string __s) const
+    { return _Fnv_hash::hash(__s.data(), __s.length()); }
 
   template<>
     size_t
+    hash<const string&>::operator()(const string& __s) const
+    { return _Fnv_hash::hash(__s.data(), __s.length()); }
+
+#ifdef _GLIBCXX_USE_WCHAR_T
+  template<>
+    size_t
+    hash<wstring>::operator()(wstring __s) const
+    { return _Fnv_hash::hash(__s.data(), __s.length() * sizeof(wchar_t)); }
+
+  template<>
+    size_t
+    hash<const wstring&>::operator()(const wstring& __s) const
+    { return _Fnv_hash::hash(__s.data(), __s.length() * sizeof(wchar_t)); }
+#endif
+#endif
+
+  template<>
+    size_t
     hash<error_code>::operator()(error_code __e) const
     {
       const size_t __tmp = std::_Fnv_hash::hash(__e._M_value);