| Index: base/cross/std_hash.h
|
| ===================================================================
|
| --- base/cross/std_hash.h (revision 27310)
|
| +++ base/cross/std_hash.h (working copy)
|
| @@ -1,165 +0,0 @@
|
| -/*
|
| - * Copyright 2009, Google Inc.
|
| - * All rights reserved.
|
| - *
|
| - * Redistribution and use in source and binary forms, with or without
|
| - * modification, are permitted provided that the following conditions are
|
| - * met:
|
| - *
|
| - * * Redistributions of source code must retain the above copyright
|
| - * notice, this list of conditions and the following disclaimer.
|
| - * * Redistributions in binary form must reproduce the above
|
| - * copyright notice, this list of conditions and the following disclaimer
|
| - * in the documentation and/or other materials provided with the
|
| - * distribution.
|
| - * * Neither the name of Google Inc. nor the names of its
|
| - * contributors may be used to endorse or promote products derived from
|
| - * this software without specific prior written permission.
|
| - *
|
| - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
| - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
| - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
| - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
| - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
| - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
| - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
| - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
| - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
| - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| - */
|
| -
|
| -
|
| -// This file declares STL hash map classes in a cross-compiler way, providing a
|
| -// GCC-compatible (not MSVC) interface.
|
| -
|
| -#ifndef O3D_BASE_CROSS_STD_HASH_H_
|
| -#define O3D_BASE_CROSS_STD_HASH_H_
|
| -
|
| -#include <build/build_config.h>
|
| -
|
| -#if defined(COMPILER_MSVC)
|
| -#include <hash_map>
|
| -#include <hash_set>
|
| -namespace o3d {
|
| -namespace base {
|
| -
|
| -struct PortableHashBase {
|
| - // These two public members are required by msvc. 4 and 8 are the
|
| - // default values.
|
| - static const size_t bucket_size = 4;
|
| - static const size_t min_buckets = 8;
|
| -};
|
| -
|
| -template <typename Key>
|
| -struct hash;
|
| -
|
| -// These are missing from MSVC.
|
| -template<> struct hash<int> {
|
| - size_t operator()(int n) const {
|
| - return static_cast<size_t>(n);
|
| - }
|
| -};
|
| -
|
| -template<> struct hash<unsigned int> {
|
| - size_t operator()(unsigned int n) const {
|
| - return static_cast<size_t>(n);
|
| - }
|
| -};
|
| -
|
| -template<typename T> struct hash<T*> {
|
| - size_t operator()(T* t) const {
|
| - return reinterpret_cast<size_t>(t);
|
| - }
|
| -};
|
| -
|
| -// If the 3rd template parameter of the GNU interface (KeyEqual) is
|
| -// omitted, then we know that it's using the == operator, so we can
|
| -// safely use the < operator.
|
| -//
|
| -// If the third parameter is specified, then we get a compile time
|
| -// error, and we know we have to go back and add some #ifdefs.
|
| -template <typename Key, typename Hash>
|
| -struct HashAndLessOperator : PortableHashBase {
|
| - bool operator()(const Key& a, const Key& b) const {
|
| - return a < b;
|
| - }
|
| - size_t operator()(const Key& key) const {
|
| - return hasher_(key);
|
| - }
|
| - Hash hasher_;
|
| -};
|
| -
|
| -template <class Key, class Hash = hash<Key> >
|
| -class hash_set : public stdext::hash_set<Key, HashAndLessOperator<Key, Hash> > {
|
| - public:
|
| - hash_set() {}
|
| - explicit hash_set(int buckets) {}
|
| - typedef std::equal_to<Key> key_equal;
|
| - size_type bucket_count() const {
|
| - return size() / bucket_size;
|
| - }
|
| -};
|
| -
|
| -template <class Key, class Val, class Hash = hash<Key> >
|
| -class hash_map : public stdext::hash_map<
|
| - Key, Val, HashAndLessOperator<Key, Hash> > {
|
| - public:
|
| - hash_map() {}
|
| - explicit hash_map(int buckets) {}
|
| - typedef std::equal_to<Key> key_equal;
|
| - size_type bucket_count() const {
|
| - return size() / bucket_size;
|
| - }
|
| -};
|
| -
|
| -template <class Key, class Hash = hash<Key> >
|
| -class hash_multiset : public stdext::hash_multiset<
|
| - Key, HashAndLessOperator<Key, Hash> > {
|
| - public:
|
| - hash_multiset() {}
|
| - explicit hash_multiset(int buckets) {}
|
| - typedef std::equal_to<Key> key_equal;
|
| - size_type bucket_count() const {
|
| - return size() / bucket_size;
|
| - }
|
| -};
|
| -
|
| -template <class Key, class Val, class Hash = hash<Key> >
|
| -class hash_multimap : public stdext::hash_multimap<
|
| - Key, Val, HashAndLessOperator<Key, Hash> > {
|
| - public:
|
| - hash_multimap() {}
|
| - explicit hash_multimap(int buckets) {}
|
| - typedef std::equal_to<Key> key_equal;
|
| - size_type bucket_count() const {
|
| - return size() / bucket_size;
|
| - }
|
| -};
|
| -
|
| -} // namespace base
|
| -} // namespace o3d
|
| -#elif defined COMPILER_GCC
|
| -#include <ext/hash_map>
|
| -#include <ext/hash_set>
|
| -#include <tr1/functional>
|
| -namespace __gnu_cxx {
|
| -template <class T> struct hash<T*> {
|
| - size_t operator() (const T* x) const {
|
| - return hash<size_t>()(reinterpret_cast<size_t>(x));
|
| - }
|
| -};
|
| -} // namespace __gnu_cxx
|
| -
|
| -namespace o3d {
|
| -namespace base {
|
| -using __gnu_cxx::hash_map;
|
| -using __gnu_cxx::hash_multimap;
|
| -using __gnu_cxx::hash_set;
|
| -using __gnu_cxx::hash_multiset;
|
| -using __gnu_cxx::hash;
|
| -} // namespace base
|
| -} // namespace o3d
|
| -#endif // COMPILER_MSVC
|
| -
|
| -#endif // O3D_BASE_CROSS_STD_HASH_H_
|
|
|