summaryrefslogtreecommitdiff
path: root/xmlreader
diff options
context:
space:
mode:
authorNoel Grandin <noel@peralex.com>2021-05-10 15:38:29 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2021-05-11 11:53:45 +0200
commitde5af8315e014ce3408f66c6de3c9c4e841f8437 (patch)
tree2417d150ec55204db4c2646818fbd9e4889ee967 /xmlreader
parent8f3b80f5c58e1f22db68be0f109eb06d2b054688 (diff)
improve perf of xmlreader::Pad
Change-Id: I83cc88977e7c287b0f428a3e01f289179b6dbad9 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/115353 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'xmlreader')
-rw-r--r--xmlreader/source/pad.cxx25
1 files changed, 14 insertions, 11 deletions
diff --git a/xmlreader/source/pad.cxx b/xmlreader/source/pad.cxx
index ce45f805f496..74bb5ec63fb0 100644
--- a/xmlreader/source/pad.cxx
+++ b/xmlreader/source/pad.cxx
@@ -29,46 +29,49 @@ namespace xmlreader {
void Pad::add(char const * begin, sal_Int32 length) {
assert(
- begin != nullptr && length >= 0 && !(span_.is() && buffer_.getLength() != 0));
+ begin != nullptr && length >= 0 && !(span_.is() && buflength_ != 0));
if (length != 0) {
flushSpan();
- if (buffer_.isEmpty()) {
+ if (buflength_ == 0) {
span_ = Span(begin, length);
} else {
- buffer_.append(begin, length);
+ memcpy(buffer_ + buflength_, begin, length);
+ buflength_ += length;
}
}
}
void Pad::addEphemeral(char const * begin, sal_Int32 length) {
assert(
- begin != nullptr && length >= 0 && !(span_.is() && buffer_.getLength() != 0));
+ begin != nullptr && length >= 0 && !(span_.is() && buflength_ != 0));
if (length != 0) {
flushSpan();
- buffer_.append(begin, length);
+ memcpy(buffer_ + buflength_, begin, length);
+ buflength_ += length;
}
}
void Pad::clear() {
- assert(!(span_.is() && buffer_.getLength() != 0));
+ assert(!(span_.is() && buflength_ != 0));
span_.clear();
- buffer_.setLength(0);
+ buflength_ = 0;
}
Span Pad::get() const {
- assert(!(span_.is() && buffer_.getLength() != 0));
+ assert(!(span_.is() && buflength_ != 0));
if (span_.is()) {
return span_;
- } else if (buffer_.isEmpty()) {
+ } else if (buflength_ == 0) {
return Span("");
} else {
- return Span(buffer_.getStr(), buffer_.getLength());
+ return Span(buffer_, buflength_);
}
}
void Pad::flushSpan() {
if (span_.is()) {
- buffer_.append(span_.begin, span_.length);
+ memcpy(buffer_ + buflength_, span_.begin, span_.length);
+ buflength_ += span_.length;
span_.clear();
}
}