C++: Make write{Struct,Field}Begin take "name" as a const char*.
Summary:
These methods previously took name as a const string&. While that way
is more idiomatic, it requires a temporary string to be constructed
when we pass a string literal (which is always). This was significantly
slowing down the serialization of field-heavy structures. This change
will break ABI compatibility, but the serialization speed boost with
no external API changes is too important to pass up.
Reviewed By: mcslee, aditya
Test Plan: make check
TracCamp Project: Thrift
Revert Plan: ok
git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@665672 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/lib/cpp/src/protocol/TProtocolTap.h b/lib/cpp/src/protocol/TProtocolTap.h
index 1259598..162f783 100644
--- a/lib/cpp/src/protocol/TProtocolTap.h
+++ b/lib/cpp/src/protocol/TProtocolTap.h
@@ -45,7 +45,7 @@
virtual uint32_t readStructBegin(std::string& name) {
uint32_t rv = source_->readStructBegin(name);
- sink_->writeStructBegin(name);
+ sink_->writeStructBegin(name.c_str());
return rv;
}
@@ -62,7 +62,7 @@
if (fieldType == T_STOP) {
sink_->writeFieldStop();
} else {
- sink_->writeFieldBegin(name, fieldType, fieldId);
+ sink_->writeFieldBegin(name.c_str(), fieldType, fieldId);
}
return rv;
}