Ver Fonte

Work around absence of hash_map.

Also, update version numbers to 2.0.2-SNAPSHOT.
kenton@google.com há 17 anos atrás
pai
commit
4410396f11

+ 1 - 1
configure.ac

@@ -7,7 +7,7 @@ AC_PREREQ(2.59)
 # * java/pom.xml
 # * java/pom.xml
 # * python/setup.py
 # * python/setup.py
 # * src/google/protobuf/stubs/common.h
 # * src/google/protobuf/stubs/common.h
-AC_INIT(protobuf, 2.0.1, protobuf@googlegroups.com)
+AC_INIT(protobuf, 2.0.2-SNAPSHOT, protobuf@googlegroups.com)
 
 
 AC_CONFIG_SRCDIR(src/google/protobuf/message.cc)
 AC_CONFIG_SRCDIR(src/google/protobuf/message.cc)
 AM_CONFIG_HEADER(config.h)
 AM_CONFIG_HEADER(config.h)

+ 1 - 1
java/pom.xml

@@ -10,7 +10,7 @@
   </parent>
   </parent>
   <groupId>com.google.protobuf</groupId>
   <groupId>com.google.protobuf</groupId>
   <artifactId>protobuf-java</artifactId>
   <artifactId>protobuf-java</artifactId>
-  <version>2.0.1</version>
+  <version>2.0.2-SNAPSHOT</version>
   <packaging>jar</packaging>
   <packaging>jar</packaging>
   <name>Protocol Buffer Java API</name>
   <name>Protocol Buffer Java API</name>
   <description>
   <description>

+ 1 - 1
python/setup.py

@@ -102,7 +102,7 @@ if __name__ == '__main__':
     generate_proto("../src/google/protobuf/descriptor.proto")
     generate_proto("../src/google/protobuf/descriptor.proto")
 
 
   setup(name = 'protobuf',
   setup(name = 'protobuf',
-        version = '2.0.1',
+        version = '2.0.2-SNAPSHOT',
         packages = [ 'google' ],
         packages = [ 'google' ],
         namespace_packages = [ 'google' ],
         namespace_packages = [ 'google' ],
         test_suite = 'setup.MakeTestSuite',
         test_suite = 'setup.MakeTestSuite',

+ 1 - 1
src/Makefile.am

@@ -55,7 +55,7 @@ nobase_include_HEADERS =                                       \
 lib_LTLIBRARIES = libprotobuf.la libprotoc.la
 lib_LTLIBRARIES = libprotobuf.la libprotoc.la
 
 
 libprotobuf_la_LIBADD = $(PTHREAD_LIBS)
 libprotobuf_la_LIBADD = $(PTHREAD_LIBS)
-libprotobuf_la_LDFLAGS = -version-info 0:0:0
+libprotobuf_la_LDFLAGS = -version-info 2:0:0
 libprotobuf_la_SOURCES =                                       \
 libprotobuf_la_SOURCES =                                       \
   google/protobuf/stubs/common.cc                              \
   google/protobuf/stubs/common.cc                              \
   google/protobuf/stubs/hash.cc                                \
   google/protobuf/stubs/hash.cc                                \

+ 2 - 2
src/google/protobuf/descriptor.pb.h

@@ -7,12 +7,12 @@
 
 
 #include <google/protobuf/stubs/common.h>
 #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 This file was generated by a newer version of protoc which is
 #error incompatible with your Protocol Buffer headers.  Please update
 #error incompatible with your Protocol Buffer headers.  Please update
 #error your headers.
 #error your headers.
 #endif
 #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 This file was generated by an older version of protoc which is
 #error incompatible with your Protocol Buffer headers.  Please
 #error incompatible with your Protocol Buffer headers.  Please
 #error regenerate this file with a newer version of protoc.
 #error regenerate this file with a newer version of protoc.

+ 5 - 5
src/google/protobuf/stubs/common.h

@@ -65,24 +65,24 @@ namespace internal {
 
 
 // The current version, represented as a single integer to make comparison
 // The current version, represented as a single integer to make comparison
 // easier:  major * 10^6 + minor * 10^3 + micro
 // 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
 // The minimum library version which works with the current version of the
 // headers.
 // 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 minimum header version which works with the current version of
 // the library.  This constant should only be used by protoc's C++ code
 // the library.  This constant should only be used by protoc's C++ code
 // generator.
 // generator.
-static const int kMinHeaderVersionForLibrary = 2000001;
+static const int kMinHeaderVersionForLibrary = 2000002;
 
 
 // The minimum protoc version which works with the current version of the
 // The minimum protoc version which works with the current version of the
 // headers.
 // 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
 // The minimum header version which works with the current version of
 // protoc.  This constant should only be used in VerifyVersion().
 // 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
 // Verifies that the headers and libraries are compatible.  Use the macro
 // below to call this.
 // below to call this.

+ 51 - 4
src/google/protobuf/stubs/hash.h

@@ -29,15 +29,62 @@
 #include HASH_MAP_H
 #include HASH_MAP_H
 #include HASH_SET_H
 #include HASH_SET_H
 #else
 #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
 #endif
 
 
 namespace google {
 namespace google {
 namespace protobuf {
 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>
 template <typename Key>
 struct hash : public HASH_NAMESPACE::hash_compare<Key> {
 struct hash : public HASH_NAMESPACE::hash_compare<Key> {