diff options
Diffstat (limited to 'src/google')
-rw-r--r-- | src/google/protobuf/descriptor.pb.h | 4 | ||||
-rw-r--r-- | src/google/protobuf/stubs/common.h | 10 | ||||
-rw-r--r-- | src/google/protobuf/stubs/hash.h | 55 |
3 files changed, 58 insertions, 11 deletions
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 <google/protobuf/stubs/common.h> -#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 <map> +#include <set> #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<T> be the same as less<T>. 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 <typename Key> +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<const char*> { + // 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 Key, typename Data, + typename HashFcn = hash<Key>, + typename EqualKey = int > +class hash_map : public std::map<Key, Data, HashFcn> { +}; + +template <typename Key, + typename HashFcn = hash<Key>, + typename EqualKey = int > +class hash_set : public std::set<Key, HashFcn> { +}; + +#elif defined(_MSC_VER) template <typename Key> struct hash : public HASH_NAMESPACE::hash_compare<Key> { |