diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index a4092758a3..dd4cef460f 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -14,7 +14,7 @@ env: jobs: create-github-prerelease: runs-on: ubuntu-latest - if: github.event_name == 'push' && contains(github.ref_name, "rc") + if: github.event_name == 'push' && contains(github.ref_name, 'rc') permissions: contents: write @@ -32,7 +32,7 @@ jobs: create-github-release: runs-on: ubuntu-latest - if: github.event_name == 'push' && !contains(github.ref_name, "rc") + if: github.event_name == 'push' && !contains(github.ref_name, 'rc') permissions: contents: write diff --git a/src/applications/bmqstoragetool/m_bmqstoragetool_cslprinter.cpp b/src/applications/bmqstoragetool/m_bmqstoragetool_cslprinter.cpp index cb2741311f..651b7fea1e 100644 --- a/src/applications/bmqstoragetool/m_bmqstoragetool_cslprinter.cpp +++ b/src/applications/bmqstoragetool/m_bmqstoragetool_cslprinter.cpp @@ -246,7 +246,7 @@ void HumanReadableCslPrinter::printSummaryResult( d_ostream << '\n' << recordCount.d_updateCount << " update record(s) found, including:" << '\n'; - bsl::vector fields(d_allocator_p); + bsl::vector fields(d_allocator_p); bmqp_ctrlmsg::ClusterMessageChoice clusterMessageChoice( d_allocator_p); for (CslUpdateChoiceMap::const_iterator it = @@ -254,7 +254,7 @@ void HumanReadableCslPrinter::printSummaryResult( it != updateChoiceMap.end(); ++it) { clusterMessageChoice.makeSelection(it->first); - fields.push_back(clusterMessageChoice.selectionName()); + fields.emplace_back(clusterMessageChoice.selectionName()); } bmqu::AlignedPrinter printer(d_ostream, &fields); for (CslUpdateChoiceMap::const_iterator it = diff --git a/src/applications/bmqstoragetool/m_bmqstoragetool_cslrecordprinter.h b/src/applications/bmqstoragetool/m_bmqstoragetool_cslrecordprinter.h index 7e33785313..65eb962bff 100644 --- a/src/applications/bmqstoragetool/m_bmqstoragetool_cslrecordprinter.h +++ b/src/applications/bmqstoragetool/m_bmqstoragetool_cslrecordprinter.h @@ -93,7 +93,7 @@ template class CslRecordPrinter { private: bsl::ostream& d_ostream; - bsl::vector d_fields; + bsl::vector d_fields; bslma::ManagedPtr d_printer_mp; bslma::Allocator* d_allocator_p; diff --git a/src/applications/bmqstoragetool/m_bmqstoragetool_printer.cpp b/src/applications/bmqstoragetool/m_bmqstoragetool_printer.cpp index 1ad366233c..c85dfc92f8 100644 --- a/src/applications/bmqstoragetool/m_bmqstoragetool_printer.cpp +++ b/src/applications/bmqstoragetool/m_bmqstoragetool_printer.cpp @@ -91,7 +91,7 @@ void printDataFileMeta(bsl::ostream& ostream, { BSLS_ASSERT_SAFE(dataFile_p && dataFile_p->isValid()); - const bsl::vector fields = {"BlazingMQ File Header", + const bsl::vector fields = {"BlazingMQ File Header", "Data File Header"}; PRINTER_TYPE1 printer(ostream, &fields); @@ -121,7 +121,7 @@ void printJournalFileMeta(bsl::ostream& ostream, { BSLS_ASSERT_SAFE(journalFile_p && journalFile_p->isValid()); - const bsl::vector fields = {"BlazingMQ File Header", + const bsl::vector fields = {"BlazingMQ File Header", "Journal File Header", "Journal SyncPoint"}; @@ -150,20 +150,20 @@ void printJournalFileMeta(bsl::ostream& ostream, s << '\n'; { // Print journal-specific fields - bsl::vector fieldsSyncPoint(allocator); + bsl::vector fieldsSyncPoint(allocator); fieldsSyncPoint.reserve(12); - fieldsSyncPoint.push_back("Last Valid Record Offset"); - fieldsSyncPoint.push_back("Record Type"); - fieldsSyncPoint.push_back("Record Timestamp"); - fieldsSyncPoint.push_back("Record Epoch"); - fieldsSyncPoint.push_back("Last Valid SyncPoint Offset"); - fieldsSyncPoint.push_back("SyncPoint Timestamp"); - fieldsSyncPoint.push_back("SyncPoint Epoch"); - fieldsSyncPoint.push_back("SyncPoint SeqNum"); - fieldsSyncPoint.push_back("SyncPoint Primary NodeId"); - fieldsSyncPoint.push_back("SyncPoint Primary LeaseId"); - fieldsSyncPoint.push_back("SyncPoint DataFileOffset (DWORDS)"); - fieldsSyncPoint.push_back("SyncPoint QlistFileOffset (WORDS)"); + fieldsSyncPoint.emplace_back("Last Valid Record Offset"); + fieldsSyncPoint.emplace_back("Record Type"); + fieldsSyncPoint.emplace_back("Record Timestamp"); + fieldsSyncPoint.emplace_back("Record Epoch"); + fieldsSyncPoint.emplace_back("Last Valid SyncPoint Offset"); + fieldsSyncPoint.emplace_back("SyncPoint Timestamp"); + fieldsSyncPoint.emplace_back("SyncPoint Epoch"); + fieldsSyncPoint.emplace_back("SyncPoint SeqNum"); + fieldsSyncPoint.emplace_back("SyncPoint Primary NodeId"); + fieldsSyncPoint.emplace_back("SyncPoint Primary LeaseId"); + fieldsSyncPoint.emplace_back("SyncPoint DataFileOffset (DWORDS)"); + fieldsSyncPoint.emplace_back("SyncPoint QlistFileOffset (WORDS)"); PRINTER_TYPE2 p(s, &fieldsSyncPoint); bsls::Types::Uint64 lastRecPos = @@ -251,20 +251,20 @@ void printQueueDetails(bsl::ostream& ostream, const bsl::size_t appKeysCount = details.d_appDetailsMap.size(); // Setup fields to be displayed - bsl::vector fields(allocator); + bsl::vector fields(allocator); fields.reserve(8); - fields.push_back("Queue Key"); + fields.emplace_back("Queue Key"); if (!details.d_queueUri.empty()) { - fields.push_back("Queue URI"); + fields.emplace_back("Queue URI"); } - fields.push_back("Total Records"); - fields.push_back("Num Queue Op Records"); - fields.push_back("Num Message Records"); - fields.push_back("Num Confirm Records"); + fields.emplace_back("Total Records"); + fields.emplace_back("Num Queue Op Records"); + fields.emplace_back("Num Message Records"); + fields.emplace_back("Num Confirm Records"); if (appKeysCount > 1U) { - fields.push_back("Num Records Per App"); + fields.emplace_back("Num Records Per App"); } - fields.push_back("Num Delete Records"); + fields.emplace_back("Num Delete Records"); { PRINTER_TYPE printer(ostream, &fields); @@ -572,12 +572,12 @@ void HumanReadablePrinter::printQueueOpSummary( d_ostream << "\nTotal number of queueOp records: " << queueOpRecordsCount << '\n'; - bsl::vector fields(d_allocator_p); + bsl::vector fields(d_allocator_p); fields.reserve(4); - fields.push_back("Number of 'purge' operations"); - fields.push_back("Number of 'creation' operations"); - fields.push_back("Number of 'deletion' operations"); - fields.push_back("Number of 'addition' operations"); + fields.emplace_back("Number of 'purge' operations"); + fields.emplace_back("Number of 'creation' operations"); + fields.emplace_back("Number of 'deletion' operations"); + fields.emplace_back("Number of 'addition' operations"); bmqu::AlignedPrinter printer(d_ostream, &fields); printer << queueOpCountsVec[mqbs::QueueOpType::e_PURGE] << queueOpCountsVec[mqbs::QueueOpType::e_CREATION] @@ -887,13 +887,13 @@ void JsonPrinter::printQueueOpSummary( { BSLS_ASSERT_SAFE(queueOpCountsVec.size() > mqbs::QueueOpType::e_ADDITION); closeBraceIfOpen(); - bsl::vector fields(d_allocator_p); + bsl::vector fields(d_allocator_p); fields.reserve(5); - fields.push_back("TotalQueueOperationsNumber"); - fields.push_back("PurgeOperationsNumber"); - fields.push_back("CreationOperationsNumber"); - fields.push_back("DeletionOperationsNumber"); - fields.push_back("AdditionOperationsNumber"); + fields.emplace_back("TotalQueueOperationsNumber"); + fields.emplace_back("PurgeOperationsNumber"); + fields.emplace_back("CreationOperationsNumber"); + fields.emplace_back("DeletionOperationsNumber"); + fields.emplace_back("AdditionOperationsNumber"); bmqu::JsonPrinter printer(d_ostream, &fields); printer << queueOpRecordsCount diff --git a/src/applications/bmqstoragetool/m_bmqstoragetool_recordprinter.h b/src/applications/bmqstoragetool/m_bmqstoragetool_recordprinter.h index cc7f01e219..4ba46e5c48 100644 --- a/src/applications/bmqstoragetool/m_bmqstoragetool_recordprinter.h +++ b/src/applications/bmqstoragetool/m_bmqstoragetool_recordprinter.h @@ -65,7 +65,7 @@ template class RecordDetailsPrinter { private: bsl::ostream& d_ostream; - bsl::vector d_fields; + bsl::vector d_fields; bslma::ManagedPtr d_printer_mp; bslma::Allocator* d_allocator_p; diff --git a/src/applications/bmqtool/m_bmqtool_storageinspector.cpp b/src/applications/bmqtool/m_bmqtool_storageinspector.cpp index 119997a396..c26755e52e 100644 --- a/src/applications/bmqtool/m_bmqtool_storageinspector.cpp +++ b/src/applications/bmqtool/m_bmqtool_storageinspector.cpp @@ -465,19 +465,19 @@ void StorageInspector::processCommand( // Print journal-specific fields BALL_LOG_OUTPUT_STREAM << "Journal SyncPoint:\n"; - bsl::vector fields; - fields.push_back("Last Valid Record Offset"); - fields.push_back("Record Type"); - fields.push_back("Record Timestamp"); - fields.push_back("Record Epoch"); - fields.push_back("Last Valid SyncPoint Offset"); - fields.push_back("SyncPoint Timestamp"); - fields.push_back("SyncPoint Epoch"); - fields.push_back("SyncPoint SeqNum"); - fields.push_back("SyncPoint Primary NodeId"); - fields.push_back("SyncPoint Primary LeaseId"); - fields.push_back("SyncPoint DataFileOffset (DWORDS)"); - fields.push_back("SyncPoint QlistFileOffset (WORDS)"); + bsl::vector fields; + fields.emplace_back("Last Valid Record Offset"); + fields.emplace_back("Record Type"); + fields.emplace_back("Record Timestamp"); + fields.emplace_back("Record Epoch"); + fields.emplace_back("Last Valid SyncPoint Offset"); + fields.emplace_back("SyncPoint Timestamp"); + fields.emplace_back("SyncPoint Epoch"); + fields.emplace_back("SyncPoint SeqNum"); + fields.emplace_back("SyncPoint Primary NodeId"); + fields.emplace_back("SyncPoint Primary LeaseId"); + fields.emplace_back("SyncPoint DataFileOffset (DWORDS)"); + fields.emplace_back("SyncPoint QlistFileOffset (WORDS)"); bmqu::AlignedPrinter printer(BALL_LOG_OUTPUT_STREAM, &fields); bsls::Types::Uint64 lastRecPos = @@ -578,10 +578,10 @@ void StorageInspector::processCommand( BALL_LOG_OUTPUT_STREAM << "Queue #" << qnum << "\n"; const QueueRecord& qr = cit->second; - bsl::vector fields; - fields.push_back("Queue URI"); - fields.push_back("QueueKey"); - fields.push_back("Number of AppIds"); + bsl::vector fields; + fields.emplace_back("Queue URI"); + fields.emplace_back("QueueKey"); + fields.emplace_back("Number of AppIds"); bmqu::AlignedPrinter printer(BALL_LOG_OUTPUT_STREAM, &fields); printer << cit->first << qr.d_queueKey << qr.d_appIds.size(); @@ -592,9 +592,9 @@ void StorageInspector::processCommand( for (unsigned int i = 0; i < appRecs.size(); ++i) { const AppIdRecord& ar = appRecs[i]; BALL_LOG_OUTPUT_STREAM << " AppId #" << i + 1 << "\n"; - bsl::vector f; - f.push_back("AppId"); - f.push_back("AppKey"); + bsl::vector f; + f.emplace_back("AppId"); + f.emplace_back("AppKey"); const int indent = 8; bmqu::AlignedPrinter p(BALL_LOG_OUTPUT_STREAM, &f, indent); diff --git a/src/groups/bmq/bmqu/bmqu_alignedprinter.h b/src/groups/bmq/bmqu/bmqu_alignedprinter.h index 75928accc7..acd728d5fd 100644 --- a/src/groups/bmq/bmqu/bmqu_alignedprinter.h +++ b/src/groups/bmq/bmqu/bmqu_alignedprinter.h @@ -29,10 +29,10 @@ ///----- // First, specify field names for printer: //.. -// bsl::vector fields; -// fields.push_back("Queue URI"); -// fields.push_back("QueueKey"); -// fields.push_back("Number of AppIds"); +// bsl::vector fields; +// fields.emplace_back("Queue URI"); +// fields.emplace_back("QueueKey"); +// fields.emplace_back("Number of AppIds"); //.. // // Next, create an instance of bmqu::AlignedPrinter: @@ -71,7 +71,7 @@ class AlignedPrinter { private: // DATA bsl::ostream& d_ostream; - const bsl::vector* d_fields_p; + const bsl::vector* d_fields_p; int d_indent; int d_width; unsigned int d_counter; @@ -89,7 +89,7 @@ class AlignedPrinter { /// is undefined unless `indent` >= 0 and at least one field is present /// in the `fields`. AlignedPrinter(bsl::ostream& stream, - const bsl::vector* fields, + const bsl::vector* fields, int indent = 4); // MANIPULATORS @@ -110,7 +110,7 @@ class AlignedPrinter { // -------------- inline AlignedPrinter::AlignedPrinter(bsl::ostream& stream, - const bsl::vector* fields, + const bsl::vector* fields, int indent) : d_ostream(stream) , d_fields_p(fields) @@ -121,9 +121,9 @@ inline AlignedPrinter::AlignedPrinter(bsl::ostream& stream, BSLS_ASSERT_SAFE(0 <= d_indent); BSLS_ASSERT_SAFE(0 < d_fields_p->size()); - int maxLen = static_cast(bsl::strlen((*d_fields_p)[0])); + int maxLen = static_cast((*d_fields_p)[0].length()); for (unsigned int i = 1; i < d_fields_p->size(); ++i) { - int len = static_cast(bsl::strlen((*d_fields_p)[i])); + int len = static_cast((*d_fields_p)[i].length()); if (maxLen < len) { maxLen = len; } @@ -138,8 +138,8 @@ inline AlignedPrinter& AlignedPrinter::operator<<(const TYPE& value) BSLS_ASSERT_SAFE(d_counter < d_fields_p->size()); d_ostream << bsl::setw(d_indent) << ' ' << (*d_fields_p)[d_counter] - << bsl::setw(static_cast( - d_width - bsl::strlen((*d_fields_p)[d_counter]))) + << bsl::setw(static_cast(d_width - + (*d_fields_p)[d_counter].length())) << ": " << value << '\n'; ++d_counter; diff --git a/src/groups/bmq/bmqu/bmqu_alignedprinter.t.cpp b/src/groups/bmq/bmqu/bmqu_alignedprinter.t.cpp new file mode 100644 index 0000000000..0c8bdc7cd2 --- /dev/null +++ b/src/groups/bmq/bmqu/bmqu_alignedprinter.t.cpp @@ -0,0 +1,166 @@ +// Copyright 2025 Bloomberg Finance L.P. +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// bmqu_alignedprinter.t.cpp -*-C++-*- +#include + +#include + +// BDE +#include +#include + +// TEST DRIVER +#include + +// CONVENIENCE +using namespace BloombergLP; +using namespace bsl; + +// ============================================================================ +// TESTS +// ---------------------------------------------------------------------------- + +static void test1_basicUsage() +// ------------------------------------------------------------------------ +// BASIC USAGE +// +// Concerns: +// Ensure proper behavior of 'AlignedPrinter' with string vector fields. +// +// Plan: +// 1. Create AlignedPrinter with string vector fields +// 2. Print various types of values +// 3. Verify output formatting is correct +// +// Testing: +// Basic functionality with bsl::vector +// ------------------------------------------------------------------------ +{ + bmqtst::TestHelper::printTestName("BASIC USAGE"); + + bmqu::MemOutStream stream; + bsl::vector fields; + fields.emplace_back("Queue URI"); + fields.emplace_back("QueueKey"); + fields.emplace_back("Number of AppIds"); + + const int indent = 4; + bmqu::AlignedPrinter printer(stream, &fields, indent); + + // Test printing various types + bsl::string uri = "bmq://bmq.tutorial.workqueue/sample-queue"; + bsl::string queueKey = "sample"; + const int numAppIds = 1; + + printer << uri << queueKey << numAppIds; + + bsl::string output = stream.str(); + + // Verify output contains expected elements + BMQTST_ASSERT(output.find("Queue URI") != bsl::string::npos); + BMQTST_ASSERT(output.find("QueueKey") != bsl::string::npos); + BMQTST_ASSERT(output.find("Number of AppIds") != bsl::string::npos); + BMQTST_ASSERT(output.find(uri) != bsl::string::npos); + BMQTST_ASSERT(output.find(queueKey) != bsl::string::npos); + BMQTST_ASSERT(output.find("1") != bsl::string::npos); +} + +static void test2_alignment() +// ------------------------------------------------------------------------ +// ALIGNMENT +// +// Concerns: +// Ensure proper alignment of fields with different lengths. +// +// Plan: +// 1. Create fields with varying lengths +// 2. Print values and verify alignment +// +// Testing: +// Field alignment with mixed field name lengths +// ------------------------------------------------------------------------ +{ + bmqtst::TestHelper::printTestName("ALIGNMENT"); + + bmqu::MemOutStream stream; + bsl::vector fields; + fields.emplace_back("Short"); + fields.emplace_back("Very Long Field Name"); + fields.emplace_back("Med"); + + bmqu::AlignedPrinter printer(stream, &fields, 2); + + printer << "value1" << "value2" << "value3"; + + bsl::string output = stream.str(); + + // Verify all field names are present + BMQTST_ASSERT(output.find("Short") != bsl::string::npos); + BMQTST_ASSERT(output.find("Very Long Field Name") != bsl::string::npos); + BMQTST_ASSERT(output.find("Med") != bsl::string::npos); + + // Basic structure check - should contain colons for alignment + BMQTST_ASSERT(output.find(": value1") != bsl::string::npos); + BMQTST_ASSERT(output.find(": value2") != bsl::string::npos); + BMQTST_ASSERT(output.find(": value3") != bsl::string::npos); +} + +static void test3_emptyFields() +// ------------------------------------------------------------------------ +// EMPTY FIELDS +// +// Concerns: +// Behavior when fields vector is empty (should assert in debug mode) +// +// Plan: +// Verify the assertion behavior for empty fields +// +// Testing: +// Precondition validation +// ------------------------------------------------------------------------ +{ + bmqtst::TestHelper::printTestName("EMPTY FIELDS"); + + bmqu::MemOutStream stream; + bsl::vector fields; // Empty vector + +#ifdef BDE_BUILD_TARGET_SAFE_2 + // In safe mode, this should assert + BMQTST_ASSERT_SAFE_FAIL(bmqu::AlignedPrinter(stream, &fields, 4)); +#endif +} + +// ============================================================================ +// MAIN PROGRAM +// ---------------------------------------------------------------------------- + +int main(int argc, char* argv[]) +{ + TEST_PROLOG(bmqtst::TestHelper::e_DEFAULT); + + switch (_testCase) { + case 0: + case 3: test3_emptyFields(); break; + case 2: test2_alignment(); break; + case 1: test1_basicUsage(); break; + default: { + cerr << "WARNING: CASE '" << _testCase << "' NOT FOUND." << endl; + bmqtst::TestHelperUtil::testStatus() = -1; + } break; + } + + TEST_EPILOG(bmqtst::TestHelper::e_DEFAULT); +} \ No newline at end of file diff --git a/src/groups/bmq/bmqu/bmqu_jsonprinter.h b/src/groups/bmq/bmqu/bmqu_jsonprinter.h index 2e033431fe..be9aac1fe2 100644 --- a/src/groups/bmq/bmqu/bmqu_jsonprinter.h +++ b/src/groups/bmq/bmqu/bmqu_jsonprinter.h @@ -29,10 +29,10 @@ ///----- // First, specify field names for printer: //.. -// bsl::vector fields; -// fields.push_back("Queue URI"); -// fields.push_back("QueueKey"); -// fields.push_back("Number of AppIds"); +// bsl::vector fields; +// fields.emplace_back("Queue URI"); +// fields.emplace_back("QueueKey"); +// fields.emplace_back("Number of AppIds"); //.. // // Next, create an instance of bmqu::AlignedPrinter: @@ -90,7 +90,7 @@ class JsonPrinter { private: // DATA bsl::ostream& d_ostream; - const bsl::vector* d_fields_p; + const bsl::vector* d_fields_p; unsigned int d_counter; // NOT IMPLEMENTED @@ -104,7 +104,9 @@ class JsonPrinter { /// object with the specified `fields` with the optionally specified /// `indent`. Behavior is undefined unless `indent` >= 0 and at least one /// field is present in the `fields`. - JsonPrinter(bsl::ostream& stream, const bsl::vector* fields); + JsonPrinter(bsl::ostream& stream, + const bsl::vector* fields, + int indent = fieldIndent); ~JsonPrinter(); @@ -128,7 +130,8 @@ class JsonPrinter { template inline JsonPrinter::JsonPrinter( bsl::ostream& stream, - const bsl::vector* fields) + const bsl::vector* fields, + int indent) : d_ostream(stream) , d_fields_p(fields) , d_counter(0) diff --git a/src/groups/mqb/mqbs/mqbs_filestoreprotocolprinter.cpp b/src/groups/mqb/mqbs/mqbs_filestoreprotocolprinter.cpp index 38a1ff428e..5b0c6a6743 100644 --- a/src/groups/mqb/mqbs/mqbs_filestoreprotocolprinter.cpp +++ b/src/groups/mqb/mqbs/mqbs_filestoreprotocolprinter.cpp @@ -107,8 +107,8 @@ bsl::ostream& operator<<(bsl::ostream& stream, bsl::ostream& operator<<(bsl::ostream& stream, const mqbs::QlistFileHeader& header) { - bsl::vector fields; - fields.push_back("HeaderWords"); + bsl::vector fields; + fields.emplace_back("HeaderWords"); stream << "Qlist File Header: \n"; @@ -253,18 +253,18 @@ namespace FileStoreProtocolPrinter { void printRecord(bsl::ostream& stream, const mqbs::MessageRecord& rec) { - bsl::vector fields; + bsl::vector fields; fields.reserve(10); - fields.push_back("PrimaryLeaseId"); - fields.push_back("SequenceNumber"); - fields.push_back("Timestamp"); - fields.push_back("Epoch"); - fields.push_back("FileKey"); - fields.push_back("QueueKey"); - fields.push_back("RefCount"); - fields.push_back("MsgOffsetDwords"); - fields.push_back("GUID"); - fields.push_back("Crc32c"); + fields.emplace_back("PrimaryLeaseId"); + fields.emplace_back("SequenceNumber"); + fields.emplace_back("Timestamp"); + fields.emplace_back("Epoch"); + fields.emplace_back("FileKey"); + fields.emplace_back("QueueKey"); + fields.emplace_back("RefCount"); + fields.emplace_back("MsgOffsetDwords"); + fields.emplace_back("GUID"); + fields.emplace_back("Crc32c"); bmqu::AlignedPrinter printer(stream, &fields); printer << rec.header().primaryLeaseId() << rec.header().sequenceNumber(); @@ -292,15 +292,15 @@ void printRecord(bsl::ostream& stream, const mqbs::MessageRecord& rec) void printRecord(bsl::ostream& stream, const mqbs::ConfirmRecord& rec) { - bsl::vector fields; + bsl::vector fields; fields.reserve(7); - fields.push_back("PrimaryLeaseId"); - fields.push_back("SequenceNumber"); - fields.push_back("Timestamp"); - fields.push_back("Epoch"); - fields.push_back("QueueKey"); - fields.push_back("AppKey"); - fields.push_back("GUID"); + fields.emplace_back("PrimaryLeaseId"); + fields.emplace_back("SequenceNumber"); + fields.emplace_back("Timestamp"); + fields.emplace_back("Epoch"); + fields.emplace_back("QueueKey"); + fields.emplace_back("AppKey"); + fields.emplace_back("GUID"); bmqu::MemOutStream queueKeyStr, appKeyStr; queueKeyStr << rec.queueKey(); @@ -331,14 +331,14 @@ void printRecord(bsl::ostream& stream, const mqbs::ConfirmRecord& rec) void printRecord(bsl::ostream& stream, const mqbs::DeletionRecord& rec) { - bsl::vector fields; - fields.push_back("PrimaryLeaseId"); - fields.push_back("SequenceNumber"); - fields.push_back("Timestamp"); - fields.push_back("Epoch"); - fields.push_back("QueueKey"); - fields.push_back("DeletionFlag"); - fields.push_back("GUID"); + bsl::vector fields; + fields.emplace_back("PrimaryLeaseId"); + fields.emplace_back("SequenceNumber"); + fields.emplace_back("Timestamp"); + fields.emplace_back("Epoch"); + fields.emplace_back("QueueKey"); + fields.emplace_back("DeletionFlag"); + fields.emplace_back("GUID"); bmqu::MemOutStream queueKeyStr; queueKeyStr << rec.queueKey(); @@ -362,21 +362,21 @@ void printRecord(bsl::ostream& stream, const mqbs::DeletionRecord& rec) void printRecord(bsl::ostream& stream, const mqbs::QueueOpRecord& rec) { - bsl::vector fields; + bsl::vector fields; fields.reserve(8); - fields.push_back("PrimaryLeaseId"); - fields.push_back("SequenceNumber"); - fields.push_back("Timestamp"); - fields.push_back("Epoch"); - fields.push_back("QueueKey"); - fields.push_back("AppKey"); - fields.push_back("QueueOpType"); + fields.emplace_back("PrimaryLeaseId"); + fields.emplace_back("SequenceNumber"); + fields.emplace_back("Timestamp"); + fields.emplace_back("Epoch"); + fields.emplace_back("QueueKey"); + fields.emplace_back("AppKey"); + fields.emplace_back("QueueOpType"); if (mqbs::QueueOpType::e_CREATION == rec.type() || mqbs::QueueOpType::e_ADDITION == rec.type()) { - fields.push_back("QLIST OffsetWords"); + fields.emplace_back("QLIST OffsetWords"); } - fields.push_back("StartPrimaryLeaseId"); - fields.push_back("StartSequenceNumber"); + fields.emplace_back("StartPrimaryLeaseId"); + fields.emplace_back("StartSequenceNumber"); bmqu::MemOutStream queueKeyStr, appKeyStr; queueKeyStr << rec.queueKey(); @@ -414,18 +414,18 @@ void printRecord(bsl::ostream& stream, const mqbs::QueueOpRecord& rec) void printRecord(bsl::ostream& stream, const mqbs::JournalOpRecord& rec) { - bsl::vector fields; + bsl::vector fields; fields.reserve(10); - fields.push_back("PrimaryLeaseId"); - fields.push_back("SequenceNumber"); - fields.push_back("Timestamp"); - fields.push_back("Epoch"); - fields.push_back("JournalOpType"); - fields.push_back("SyncPointType"); - fields.push_back("SyncPtPrimaryLeaseId"); - fields.push_back("SyncPtSequenceNumber"); - fields.push_back("PrimaryNodeId"); - fields.push_back("DataFileOffsetDwords"); + fields.emplace_back("PrimaryLeaseId"); + fields.emplace_back("SequenceNumber"); + fields.emplace_back("Timestamp"); + fields.emplace_back("Epoch"); + fields.emplace_back("JournalOpType"); + fields.emplace_back("SyncPointType"); + fields.emplace_back("SyncPtPrimaryLeaseId"); + fields.emplace_back("SyncPtSequenceNumber"); + fields.emplace_back("PrimaryNodeId"); + fields.emplace_back("DataFileOffsetDwords"); bmqu::AlignedPrinter printer(stream, &fields); printer << rec.header().primaryLeaseId() << rec.header().sequenceNumber(); @@ -620,11 +620,11 @@ void printIterator(mqbs::QlistFileIterator& it) it.loadAppIds(&appIdLenPairs); it.loadAppIdHashes(&appIdHashes); - bsl::vector fields; + bsl::vector fields; fields.reserve(3); - fields.push_back("Queue URI"); - fields.push_back("QueueKey"); - fields.push_back("NumAppIds"); + fields.emplace_back("Queue URI"); + fields.emplace_back("QueueKey"); + fields.emplace_back("NumAppIds"); BALL_LOG_INFO_BLOCK { @@ -640,10 +640,10 @@ void printIterator(mqbs::QlistFileIterator& it) << numAppIds; if (0 != numAppIds) { - bsl::vector appIdsInfo; + bsl::vector appIdsInfo; for (size_t n = 0; n < numAppIds; ++n) { - appIdsInfo.push_back("AppId"); - appIdsInfo.push_back("AppKey"); + appIdsInfo.emplace_back("AppId"); + appIdsInfo.emplace_back("AppKey"); } bmqu::AlignedPrinter p(BALL_LOG_OUTPUT_STREAM, &appIdsInfo); diff --git a/src/groups/mqb/mqbs/mqbs_filestoreprotocolprinter.h b/src/groups/mqb/mqbs/mqbs_filestoreprotocolprinter.h index 9bffe83291..f312681445 100644 --- a/src/groups/mqb/mqbs/mqbs_filestoreprotocolprinter.h +++ b/src/groups/mqb/mqbs/mqbs_filestoreprotocolprinter.h @@ -100,13 +100,13 @@ void printFileHeader(bsl::ostream& stream, const mqbs::MappedFileDescriptor& mfd, bslma::Allocator* allocator = 0) { - bsl::vector fields(allocator); + bsl::vector fields(allocator); fields.reserve(5); - fields.push_back("Protocol Version"); - fields.push_back("Bitness"); - fields.push_back("FileType"); - fields.push_back("HeaderWords"); - fields.push_back("PartitionId"); + fields.emplace_back("Protocol Version"); + fields.emplace_back("Bitness"); + fields.emplace_back("FileType"); + fields.emplace_back("HeaderWords"); + fields.emplace_back("PartitionId"); const mqbs::FileHeader& fh = mqbs::FileStoreProtocolUtil::bmqHeader(mfd); @@ -124,18 +124,18 @@ void printJournalFileHeader(bsl::ostream& stream, const mqbs::MappedFileDescriptor& journalFd, bslma::Allocator* allocator = 0) { - bsl::vector fields(allocator); + bsl::vector fields(allocator); fields.reserve(10); - fields.push_back("HeaderWords"); - fields.push_back("RecordWords"); - fields.push_back("First SyncPointRecord offset words"); - fields.push_back("First SyncPointRecord type"); - fields.push_back("First SyncPointRecord primaryNodeId"); - fields.push_back("First SyncPointRecord primaryLeaseId"); - fields.push_back("First SyncPointRecord sequenceNumber"); - fields.push_back("First SyncPointRecord dataFileOffset"); - fields.push_back("First SyncPointRecord timestamp"); - fields.push_back("First SyncPointRecord epoch"); + fields.emplace_back("HeaderWords"); + fields.emplace_back("RecordWords"); + fields.emplace_back("First SyncPointRecord offset words"); + fields.emplace_back("First SyncPointRecord type"); + fields.emplace_back("First SyncPointRecord primaryNodeId"); + fields.emplace_back("First SyncPointRecord primaryLeaseId"); + fields.emplace_back("First SyncPointRecord sequenceNumber"); + fields.emplace_back("First SyncPointRecord dataFileOffset"); + fields.emplace_back("First SyncPointRecord timestamp"); + fields.emplace_back("First SyncPointRecord epoch"); bsls::Types::Uint64 offsetW = header.firstSyncPointOffsetWords(); @@ -183,10 +183,10 @@ void printDataFileHeader(bsl::ostream& stream, const mqbs::DataFileHeader& header, bslma::Allocator* allocator = 0) { - bsl::vector fields(allocator); + bsl::vector fields(allocator); fields.reserve(2); - fields.push_back("HeaderWords"); - fields.push_back("FileId (FileKey)"); + fields.emplace_back("HeaderWords"); + fields.emplace_back("FileId (FileKey)"); bmqu::MemOutStream os; os << header.fileKey();