Anonymous avatar Anonymous committed 8140e32

Down-integrate some code from an internal branch. (More to come.)

Comments (0)

Files changed (8)

   * 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:
 

examples/add_person.cc

     }
   }
 
+  // Optional:  Delete all global objects allocated by libprotobuf.
+  google::protobuf::ShutdownProtobufLibrary();
+
   return 0;
 }

examples/list_people.cc

 
   ListPeople(address_book);
 
+  // Optional:  Delete all global objects allocated by libprotobuf.
+  google::protobuf::ShutdownProtobufLibrary();
+
   return 0;
 }

java/src/main/java/com/google/protobuf/CodedOutputStream.java

    * 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

src/google/protobuf/compiler/cpp/cpp_helpers.cc

     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:

src/google/protobuf/compiler/cpp/cpp_unittest.cc

 #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>
 // 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:

src/google/protobuf/message.h

   // 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
   // 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.

src/google/protobuf/unittest.proto

   // 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
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.