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
return 0;
}
-uint32_t TBinaryProtocol::writeStructBegin(const string& name) {
+uint32_t TBinaryProtocol::writeStructBegin(const char* name) {
return 0;
}
return 0;
}
-uint32_t TBinaryProtocol::writeFieldBegin(const string& name,
+uint32_t TBinaryProtocol::writeFieldBegin(const char* name,
const TType fieldType,
const int16_t fieldId) {
uint32_t wsize = 0;
virtual uint32_t writeMessageEnd();
- uint32_t writeStructBegin(const std::string& name);
+ uint32_t writeStructBegin(const char* name);
uint32_t writeStructEnd();
- uint32_t writeFieldBegin(const std::string& name,
+ uint32_t writeFieldBegin(const char* name,
const TType fieldType,
const int16_t fieldId);
return writeIndented(")\n");
}
-uint32_t TDebugProtocol::writeStructBegin(const string& name) {
+uint32_t TDebugProtocol::writeStructBegin(const char* name) {
uint32_t size = 0;
size += startItem();
- size += writePlain(name + " {\n");
+ size += writePlain(string(name) + " {\n");
indentUp();
write_state_.push_back(STRUCT);
return size;
return size;
}
-uint32_t TDebugProtocol::writeFieldBegin(const string& name,
+uint32_t TDebugProtocol::writeFieldBegin(const char* name,
const TType fieldType,
const int16_t fieldId) {
// sprintf(id_str, "%02d", fieldId);
virtual uint32_t writeMessageEnd();
- uint32_t writeStructBegin(const std::string& name);
+ uint32_t writeStructBegin(const char* name);
uint32_t writeStructEnd();
- uint32_t writeFieldBegin(const std::string& name,
+ uint32_t writeFieldBegin(const char* name,
const TType fieldType,
const int16_t fieldId);
return 0;
}
-uint32_t TDenseProtocol::writeStructBegin(const string& name) {
+uint32_t TDenseProtocol::writeStructBegin(const char* name) {
uint32_t xfer = 0;
// The TypeSpec stack should be empty if this is the top-level read/write.
return 0;
}
-uint32_t TDenseProtocol::writeFieldBegin(const string& name,
+uint32_t TDenseProtocol::writeFieldBegin(const char* name,
const TType fieldType,
const int16_t fieldId) {
uint32_t xfer = 0;
virtual uint32_t writeMessageEnd();
- virtual uint32_t writeStructBegin(const std::string& name);
+ virtual uint32_t writeStructBegin(const char* name);
virtual uint32_t writeStructEnd();
- virtual uint32_t writeFieldBegin(const std::string& name,
+ virtual uint32_t writeFieldBegin(const char* name,
const TType fieldType,
const int16_t fieldId);
return writeJSONArrayEnd();
}
-uint32_t TJSONProtocol::writeStructBegin(const std::string& name) {
+uint32_t TJSONProtocol::writeStructBegin(const char* name) {
return writeJSONObjectStart();
}
return writeJSONObjectEnd();
}
-uint32_t TJSONProtocol::writeFieldBegin(const std::string& name,
+uint32_t TJSONProtocol::writeFieldBegin(const char* name,
const TType fieldType,
const int16_t fieldId) {
uint32_t result = writeJSONInteger(fieldId);
uint32_t writeMessageEnd();
- uint32_t writeStructBegin(const std::string& name);
+ uint32_t writeStructBegin(const char* name);
uint32_t writeStructEnd();
- uint32_t writeFieldBegin(const std::string& name,
+ uint32_t writeFieldBegin(const char* name,
const TType fieldType,
const int16_t fieldId);
}
- uint32_t writeStructBegin(const std::string& name) {
+ uint32_t writeStructBegin(const char* name) {
throw TProtocolException(TProtocolException::NOT_IMPLEMENTED,
subclass_ + " does not support writing (yet).");
}
subclass_ + " does not support writing (yet).");
}
- uint32_t writeFieldBegin(const std::string& name,
+ uint32_t writeFieldBegin(const char* name,
const TType fieldType,
const int16_t fieldId) {
throw TProtocolException(TProtocolException::NOT_IMPLEMENTED,
virtual uint32_t writeMessageEnd() = 0;
- virtual uint32_t writeStructBegin(const std::string& name) = 0;
+ virtual uint32_t writeStructBegin(const char* name) = 0;
virtual uint32_t writeStructEnd() = 0;
- virtual uint32_t writeFieldBegin(const std::string& name,
+ virtual uint32_t writeFieldBegin(const char* name,
const TType fieldType,
const int16_t fieldId) = 0;
virtual uint32_t readStructBegin(std::string& name) {
uint32_t rv = source_->readStructBegin(name);
- sink_->writeStructBegin(name);
+ sink_->writeStructBegin(name.c_str());
return rv;
}
if (fieldType == T_STOP) {
sink_->writeFieldStop();
} else {
- sink_->writeFieldBegin(name, fieldType, fieldId);
+ sink_->writeFieldBegin(name.c_str(), fieldType, fieldId);
}
return rv;
}