diff options
author | kenton@google.com <kenton@google.com@630680e5-0e50-0410-840e-4b1c322b438d> | 2009-07-24 01:00:35 +0000 |
---|---|---|
committer | kenton@google.com <kenton@google.com@630680e5-0e50-0410-840e-4b1c322b438d> | 2009-07-24 01:00:35 +0000 |
commit | d2fd0638c309113ccae3731a58e30419f522269a (patch) | |
tree | 19765ef6018015a1ae7a84ead0dd13592c2442b5 | |
parent | 31afcd730b279a6aa810cee447757725a7031353 (diff) | |
download | protobuf-d2fd0638c309113ccae3731a58e30419f522269a.tar.gz protobuf-d2fd0638c309113ccae3731a58e30419f522269a.tar.bz2 protobuf-d2fd0638c309113ccae3731a58e30419f522269a.zip |
Down-integrate some code from an internal branch. (More to come.)
-rw-r--r-- | CHANGES.txt | 3 | ||||
-rw-r--r-- | examples/add_person.cc | 3 | ||||
-rw-r--r-- | examples/list_people.cc | 3 | ||||
-rw-r--r-- | java/src/main/java/com/google/protobuf/CodedOutputStream.java | 1 | ||||
-rw-r--r-- | src/google/protobuf/compiler/cpp/cpp_helpers.cc | 10 | ||||
-rw-r--r-- | src/google/protobuf/compiler/cpp/cpp_unittest.cc | 14 | ||||
-rw-r--r-- | src/google/protobuf/message.h | 10 | ||||
-rw-r--r-- | src/google/protobuf/unittest.proto | 10 |
8 files changed, 47 insertions, 7 deletions
diff --git a/CHANGES.txt b/CHANGES.txt index 76e401fc..4f870c31 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -7,6 +7,9 @@ * Added RemoveLast and SwapElements(index1, index2) to Reflection interface for repeated elements. * Added Swap(Message) to Reflection interface. + * Floating-point literals in generated code that are intended to be + single-precision now explicitly have 'f' suffix to avoid pedantic warnings + produced by some compilers. 2009-05-13 version 2.1.0: diff --git a/examples/add_person.cc b/examples/add_person.cc index 2aca216b..b9ca44fc 100644 --- a/examples/add_person.cc +++ b/examples/add_person.cc @@ -88,5 +88,8 @@ int main(int argc, char* argv[]) { } } + // Optional: Delete all global objects allocated by libprotobuf. + google::protobuf::ShutdownProtobufLibrary(); + return 0; } diff --git a/examples/list_people.cc b/examples/list_people.cc index bd9a583f..5363152e 100644 --- a/examples/list_people.cc +++ b/examples/list_people.cc @@ -61,5 +61,8 @@ int main(int argc, char* argv[]) { ListPeople(address_book); + // Optional: Delete all global objects allocated by libprotobuf. + google::protobuf::ShutdownProtobufLibrary(); + return 0; } diff --git a/java/src/main/java/com/google/protobuf/CodedOutputStream.java b/java/src/main/java/com/google/protobuf/CodedOutputStream.java index e8be8611..69c22d89 100644 --- a/java/src/main/java/com/google/protobuf/CodedOutputStream.java +++ b/java/src/main/java/com/google/protobuf/CodedOutputStream.java @@ -808,7 +808,6 @@ public final class CodedOutputStream { * field of arbitrary type, excluding tag, to the stream. * * @param type The field's type. - * @param number The field's number. * @param value Object representing the field's value. Must be of the exact * type which would be returned by * {@link Message#getField(Descriptors.FieldDescriptor)} for diff --git a/src/google/protobuf/compiler/cpp/cpp_helpers.cc b/src/google/protobuf/compiler/cpp/cpp_helpers.cc index 070fde55..595aeaeb 100644 --- a/src/google/protobuf/compiler/cpp/cpp_helpers.cc +++ b/src/google/protobuf/compiler/cpp/cpp_helpers.cc @@ -227,7 +227,15 @@ string DefaultValue(const FieldDescriptor* field) { case FieldDescriptor::CPPTYPE_DOUBLE: return SimpleDtoa(field->default_value_double()); case FieldDescriptor::CPPTYPE_FLOAT: - return SimpleFtoa(field->default_value_float()); + { + // If floating point value contains a period (.) or an exponent (either + // E or e), then append suffix 'f' to make it a floating-point literal. + string float_value = SimpleFtoa(field->default_value_float()); + if (float_value.find_first_of(".eE") != string::npos) { + float_value.push_back('f'); + } + return float_value; + } case FieldDescriptor::CPPTYPE_BOOL: return field->default_value_bool() ? "true" : "false"; case FieldDescriptor::CPPTYPE_ENUM: diff --git a/src/google/protobuf/compiler/cpp/cpp_unittest.cc b/src/google/protobuf/compiler/cpp/cpp_unittest.cc index ea9cc32d..cabf08fd 100644 --- a/src/google/protobuf/compiler/cpp/cpp_unittest.cc +++ b/src/google/protobuf/compiler/cpp/cpp_unittest.cc @@ -50,9 +50,11 @@ #include <google/protobuf/unittest_optimize_for.pb.h> #include <google/protobuf/unittest_embed_optimize_for.pb.h> #include <google/protobuf/test_util.h> +#include <google/protobuf/compiler/cpp/cpp_helpers.h> #include <google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.h> #include <google/protobuf/compiler/importer.h> #include <google/protobuf/io/coded_stream.h> +#include <google/protobuf/io/tokenizer.h> #include <google/protobuf/io/zero_copy_stream_impl.h> #include <google/protobuf/descriptor.h> #include <google/protobuf/descriptor.pb.h> @@ -73,6 +75,18 @@ namespace cpp { // Can't use an anonymous namespace here due to brokenness of Tru64 compiler. namespace cpp_unittest { +TEST(ExtremeDefaultValues, FloatingPoint) { + const unittest::TestExtremeDefaultValues& extreme_default = + unittest::TestExtremeDefaultValues::default_instance(); + + EXPECT_EQ(0.0f, extreme_default.zero_float()); + EXPECT_EQ(1.0f, extreme_default.one_float()); + EXPECT_EQ(1.5f, extreme_default.small_float()); + EXPECT_EQ(-1.0f, extreme_default.negative_one_float()); + EXPECT_EQ(-1.5f, extreme_default.negative_float()); + EXPECT_EQ(2.0e8f, extreme_default.large_float()); + EXPECT_EQ(-8e-28f, extreme_default.small_negative_float()); +} class MockErrorCollector : public MultiFileErrorCollector { public: diff --git a/src/google/protobuf/message.h b/src/google/protobuf/message.h index 0f0ef887..41716057 100644 --- a/src/google/protobuf/message.h +++ b/src/google/protobuf/message.h @@ -223,6 +223,11 @@ class LIBPROTOBUF_EXPORT Message { // See Reflection::GetUnknownFields() for more on unknown fields. virtual void DiscardUnknownFields(); + // Computes (an estimate of) the total number of bytes currently used for + // storing the message in memory. The default implementation calls the + // Reflection object's SpaceUsed() method. + virtual int SpaceUsed() const; + // Debugging ------------------------------------------------------- // Generates a human readable form of this message, useful for debugging @@ -362,11 +367,6 @@ class LIBPROTOBUF_EXPORT Message { // this, it MUST override SetCachedSize(). virtual int ByteSize() const; - // Computes (an estimate of) the total number of bytes currently used for - // storing the message in memory. The default implementation calls the - // Reflection object's SpaceUsed() method. - virtual int SpaceUsed() const; - // Serializes the message without recomputing the size. The message must // not have changed since the last call to ByteSize(); if it has, the results // are undefined. diff --git a/src/google/protobuf/unittest.proto b/src/google/protobuf/unittest.proto index 85a14652..03811de8 100644 --- a/src/google/protobuf/unittest.proto +++ b/src/google/protobuf/unittest.proto @@ -458,6 +458,16 @@ message TestExtremeDefaultValues { // the UTF-8 text directly into this text file rather than escape it, but // lots of people use editors that would be confused by this.) optional string utf8_string = 6 [default = "\341\210\264"]; + + // Tests for single-precision floating-point values. + optional float zero_float = 7 [default = 0]; + optional float one_float = 8 [default = 1]; + optional float small_float = 9 [default = 1.5]; + optional float negative_one_float = 10 [default = -1]; + optional float negative_float = 11 [default = -1.5]; + // Using exponents + optional float large_float = 12 [default = 2E8]; + optional float small_negative_float = 13 [default = -8e-28]; } // Test String and Bytes: string is for valid UTF-8 strings |