Commit 532cb200 authored by Zentaro Kavanagh's avatar Zentaro Kavanagh Committed by Commit Bot

ipp_converter: Cleanup vector construction

- Use constructor where possible
- Reserve space where known

Bug: None
Test: manual
Change-Id: I5f7c00d1cd67300a54f25ea48e238571017e1b13
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2283890
Commit-Queue: Zentaro Kavanagh <zentaro@chromium.org>
Reviewed-by: default avatarSean Kau <skau@chromium.org>
Auto-Submit: Zentaro Kavanagh <zentaro@chromium.org>
Cr-Commit-Position: refs/heads/master@{#786008}
parent b98907e5
......@@ -58,7 +58,7 @@ ssize_t IppWrite(base::span<uint8_t>* dst, ipp_uchar_t* source, size_t bytes) {
// Returns a parsed HttpHeader on success, empty Optional on failure.
base::Optional<HttpHeader> ParseHeader(base::StringPiece header) {
if (header.find(kCarriage) != std::string::npos) {
if (base::Contains(header, kCarriage)) {
return base::nullopt;
}
......@@ -116,8 +116,11 @@ base::Optional<ValueType> ValueTagToType(const int value_tag) {
}
std::vector<bool> IppGetBools(ipp_attribute_t* attr) {
const size_t count = ippGetCount(attr);
std::vector<bool> ret;
for (int i = 0; i < ippGetCount(attr); ++i) {
ret.reserve(count);
for (size_t i = 0; i < count; ++i) {
// No decipherable failure condition for this libCUPS method.
ret.push_back(ippGetBoolean(attr, i));
}
......@@ -125,8 +128,11 @@ std::vector<bool> IppGetBools(ipp_attribute_t* attr) {
}
base::Optional<std::vector<int>> IppGetInts(ipp_attribute_t* attr) {
const size_t count = ippGetCount(attr);
std::vector<int> ret;
for (int i = 0; i < ippGetCount(attr); ++i) {
ret.reserve(count);
for (size_t i = 0; i < count; ++i) {
int v = ippGetInteger(attr, i);
if (!v) {
return base::nullopt;
......@@ -137,8 +143,11 @@ base::Optional<std::vector<int>> IppGetInts(ipp_attribute_t* attr) {
}
base::Optional<std::vector<std::string>> IppGetStrings(ipp_attribute_t* attr) {
const size_t count = ippGetCount(attr);
std::vector<std::string> ret;
for (int i = 0; i < ippGetCount(attr); ++i) {
ret.reserve(count);
for (size_t i = 0; i < count; ++i) {
const char* v = ippGetString(
attr, i, nullptr /* TODO(crbug.com/945409): figure out language */);
if (!v) {
......@@ -169,13 +178,11 @@ base::Optional<std::vector<uint8_t>> BuildRequestLine(
base::StringPiece method,
base::StringPiece endpoint,
base::StringPiece http_version) {
std::vector<uint8_t> ret;
std::string status_line =
base::StrCat({method, kStatusDelimiter, endpoint, kStatusDelimiter,
http_version, kCarriage});
std::copy(status_line.begin(), status_line.end(), std::back_inserter(ret));
return ret;
return std::vector<uint8_t>(status_line.begin(), status_line.end());
}
base::Optional<std::vector<HttpHeader>> ParseHeaders(
......@@ -184,6 +191,7 @@ base::Optional<std::vector<HttpHeader>> ParseHeaders(
headers_slice, kCarriage, base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
std::vector<HttpHeader> ret;
ret.reserve(raw_headers.size());
for (auto raw_header : raw_headers) {
auto header = ParseHeader(raw_header);
if (!header) {
......@@ -207,9 +215,7 @@ base::Optional<std::vector<uint8_t>> BuildHeaders(
// End-of-headers sentinel is a double carriage return; add the second one.
headers += kCarriage;
std::vector<uint8_t> ret;
std::copy(headers.begin(), headers.end(), std::back_inserter(ret));
return ret;
return std::vector<uint8_t>(headers.begin(), headers.end());
}
// Synchronously reads/parses |ipp_slice| and returns the resulting ipp_t
......@@ -226,7 +232,7 @@ printing::ScopedIppPtr ParseIppMessage(base::span<const uint8_t> ipp_slice) {
if (ret == IPP_STATE_ERROR) {
// Read failed, clear and return nullptr
ipp.reset(nullptr);
ipp.reset();
}
return ipp;
......@@ -280,6 +286,10 @@ base::Optional<std::vector<uint8_t>> BuildIppRequest(
// Marshall request
std::vector<uint8_t> ret;
const size_t request_size = request_line_buffer->size() +
headers_buffer->size() +
ipp_message_buffer->size() + ipp_data.size();
ret.reserve(request_size);
ret.insert(ret.end(), request_line_buffer->begin(),
request_line_buffer->end());
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment