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) { ...@@ -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. // Returns a parsed HttpHeader on success, empty Optional on failure.
base::Optional<HttpHeader> ParseHeader(base::StringPiece header) { base::Optional<HttpHeader> ParseHeader(base::StringPiece header) {
if (header.find(kCarriage) != std::string::npos) { if (base::Contains(header, kCarriage)) {
return base::nullopt; return base::nullopt;
} }
...@@ -116,8 +116,11 @@ base::Optional<ValueType> ValueTagToType(const int value_tag) { ...@@ -116,8 +116,11 @@ base::Optional<ValueType> ValueTagToType(const int value_tag) {
} }
std::vector<bool> IppGetBools(ipp_attribute_t* attr) { std::vector<bool> IppGetBools(ipp_attribute_t* attr) {
const size_t count = ippGetCount(attr);
std::vector<bool> ret; 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. // No decipherable failure condition for this libCUPS method.
ret.push_back(ippGetBoolean(attr, i)); ret.push_back(ippGetBoolean(attr, i));
} }
...@@ -125,8 +128,11 @@ std::vector<bool> IppGetBools(ipp_attribute_t* attr) { ...@@ -125,8 +128,11 @@ std::vector<bool> IppGetBools(ipp_attribute_t* attr) {
} }
base::Optional<std::vector<int>> IppGetInts(ipp_attribute_t* attr) { base::Optional<std::vector<int>> IppGetInts(ipp_attribute_t* attr) {
const size_t count = ippGetCount(attr);
std::vector<int> ret; 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); int v = ippGetInteger(attr, i);
if (!v) { if (!v) {
return base::nullopt; return base::nullopt;
...@@ -137,8 +143,11 @@ base::Optional<std::vector<int>> IppGetInts(ipp_attribute_t* attr) { ...@@ -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) { base::Optional<std::vector<std::string>> IppGetStrings(ipp_attribute_t* attr) {
const size_t count = ippGetCount(attr);
std::vector<std::string> ret; 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( const char* v = ippGetString(
attr, i, nullptr /* TODO(crbug.com/945409): figure out language */); attr, i, nullptr /* TODO(crbug.com/945409): figure out language */);
if (!v) { if (!v) {
...@@ -169,13 +178,11 @@ base::Optional<std::vector<uint8_t>> BuildRequestLine( ...@@ -169,13 +178,11 @@ base::Optional<std::vector<uint8_t>> BuildRequestLine(
base::StringPiece method, base::StringPiece method,
base::StringPiece endpoint, base::StringPiece endpoint,
base::StringPiece http_version) { base::StringPiece http_version) {
std::vector<uint8_t> ret;
std::string status_line = std::string status_line =
base::StrCat({method, kStatusDelimiter, endpoint, kStatusDelimiter, base::StrCat({method, kStatusDelimiter, endpoint, kStatusDelimiter,
http_version, kCarriage}); http_version, kCarriage});
std::copy(status_line.begin(), status_line.end(), std::back_inserter(ret)); return std::vector<uint8_t>(status_line.begin(), status_line.end());
return ret;
} }
base::Optional<std::vector<HttpHeader>> ParseHeaders( base::Optional<std::vector<HttpHeader>> ParseHeaders(
...@@ -184,6 +191,7 @@ 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); headers_slice, kCarriage, base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
std::vector<HttpHeader> ret; std::vector<HttpHeader> ret;
ret.reserve(raw_headers.size());
for (auto raw_header : raw_headers) { for (auto raw_header : raw_headers) {
auto header = ParseHeader(raw_header); auto header = ParseHeader(raw_header);
if (!header) { if (!header) {
...@@ -207,9 +215,7 @@ base::Optional<std::vector<uint8_t>> BuildHeaders( ...@@ -207,9 +215,7 @@ base::Optional<std::vector<uint8_t>> BuildHeaders(
// End-of-headers sentinel is a double carriage return; add the second one. // End-of-headers sentinel is a double carriage return; add the second one.
headers += kCarriage; headers += kCarriage;
std::vector<uint8_t> ret; return std::vector<uint8_t>(headers.begin(), headers.end());
std::copy(headers.begin(), headers.end(), std::back_inserter(ret));
return ret;
} }
// Synchronously reads/parses |ipp_slice| and returns the resulting ipp_t // 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) { ...@@ -226,7 +232,7 @@ printing::ScopedIppPtr ParseIppMessage(base::span<const uint8_t> ipp_slice) {
if (ret == IPP_STATE_ERROR) { if (ret == IPP_STATE_ERROR) {
// Read failed, clear and return nullptr // Read failed, clear and return nullptr
ipp.reset(nullptr); ipp.reset();
} }
return ipp; return ipp;
...@@ -280,6 +286,10 @@ base::Optional<std::vector<uint8_t>> BuildIppRequest( ...@@ -280,6 +286,10 @@ base::Optional<std::vector<uint8_t>> BuildIppRequest(
// Marshall request // Marshall request
std::vector<uint8_t> ret; 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(), ret.insert(ret.end(), request_line_buffer->begin(),
request_line_buffer->end()); 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