From 4410396f11bbce82ed806f93ab9befb8034619b1 Mon Sep 17 00:00:00 2001 From: "kenton@google.com" Date: Fri, 19 Sep 2008 16:53:32 +0000 Subject: Work around absence of hash_map. Also, update version numbers to 2.0.2-SNAPSHOT. --- src/google/protobuf/descriptor.pb.h | 4 +-- src/google/protobuf/stubs/common.h | 10 +++---- src/google/protobuf/stubs/hash.h | 55 ++++++++++++++++++++++++++++++++++--- 3 files changed, 58 insertions(+), 11 deletions(-) (limited to 'src/google') diff --git a/src/google/protobuf/descriptor.pb.h b/src/google/protobuf/descriptor.pb.h index 926e9bd0..a1a5f1f3 100644 --- a/src/google/protobuf/descriptor.pb.h +++ b/src/google/protobuf/descriptor.pb.h @@ -7,12 +7,12 @@ #include -#if GOOGLE_PROTOBUF_VERSION < 2000001 +#if GOOGLE_PROTOBUF_VERSION < 2000002 #error This file was generated by a newer version of protoc which is #error incompatible with your Protocol Buffer headers. Please update #error your headers. #endif -#if 2000001 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION +#if 2000002 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION #error This file was generated by an older version of protoc which is #error incompatible with your Protocol Buffer headers. Please #error regenerate this file with a newer version of protoc. diff --git a/src/google/protobuf/stubs/common.h b/src/google/protobuf/stubs/common.h index 89070d63..2cc42f16 100644 --- a/src/google/protobuf/stubs/common.h +++ b/src/google/protobuf/stubs/common.h @@ -65,24 +65,24 @@ namespace internal { // The current version, represented as a single integer to make comparison // easier: major * 10^6 + minor * 10^3 + micro -#define GOOGLE_PROTOBUF_VERSION 2000001 +#define GOOGLE_PROTOBUF_VERSION 2000002 // The minimum library version which works with the current version of the // headers. -#define GOOGLE_PROTOBUF_MIN_LIBRARY_VERSION 2000001 +#define GOOGLE_PROTOBUF_MIN_LIBRARY_VERSION 2000002 // The minimum header version which works with the current version of // the library. This constant should only be used by protoc's C++ code // generator. -static const int kMinHeaderVersionForLibrary = 2000001; +static const int kMinHeaderVersionForLibrary = 2000002; // The minimum protoc version which works with the current version of the // headers. -#define GOOGLE_PROTOBUF_MIN_PROTOC_VERSION 2000001 +#define GOOGLE_PROTOBUF_MIN_PROTOC_VERSION 2000002 // The minimum header version which works with the current version of // protoc. This constant should only be used in VerifyVersion(). -static const int kMinHeaderVersionForProtoc = 2000001; +static const int kMinHeaderVersionForProtoc = 2000002; // Verifies that the headers and libraries are compatible. Use the macro // below to call this. diff --git a/src/google/protobuf/stubs/hash.h b/src/google/protobuf/stubs/hash.h index a62b3f6e..27b83ed4 100644 --- a/src/google/protobuf/stubs/hash.h +++ b/src/google/protobuf/stubs/hash.h @@ -29,15 +29,62 @@ #include HASH_MAP_H #include HASH_SET_H #else -// TODO(kenton): Deal with non-existence of hash_map somehow. Maybe emulate -// it with map? -#error "Your STL implementation lacks hash_map and/or hash_set." +#define MISSING_HASH +#include +#include #endif namespace google { namespace protobuf { -#ifdef _MSC_VER +#ifdef MISSING_HASH + +// This system doesn't have hash_map or hash_set. Emulate them using map and +// set. + +// Make hash be the same as less. Note that everywhere where custom +// hash functions are defined in the protobuf code, they are also defined such +// that they can be used as "less" functions, which is required by MSVC anyway. +template +struct hash { + // Dummy, just to make derivative hash functions compile. + int operator()(const Key& key) { + GOOGLE_LOG(FATAL) << "Should never be called."; + return 0; + } + + inline bool operator()(const Key& a, const Key& b) const { + return a < b; + } +}; + +// Make sure char* is compared by value. +template <> +struct hash { + // Dummy, just to make derivative hash functions compile. + int operator()(const char* key) { + GOOGLE_LOG(FATAL) << "Should never be called."; + return 0; + } + + inline bool operator()(const char* a, const char* b) const { + return strcmp(a, b) < 0; + } +}; + +template , + typename EqualKey = int > +class hash_map : public std::map { +}; + +template , + typename EqualKey = int > +class hash_set : public std::set { +}; + +#elif defined(_MSC_VER) template struct hash : public HASH_NAMESPACE::hash_compare { -- cgit v1.2.3