Skip to content

Commit 6cd9b20

Browse files
authored
refactor: enhance m_bmqstoragetool_parameters.h (#1583)
- Remove unused includes from the header and add direct includes to printer.h and searchresult.h - Move record-type and print-mode constants into an unnamed namespace in the .cpp as bsl::string_view - Add allocator traits to CommandLineArguments and Parameters - Store d_allocator_p in each class and remove allocator argument used in other functions Signed-off-by: Mauricio0704 <mausancarr0704@gmail.com>
1 parent 5a4fce4 commit 6cd9b20

7 files changed

Lines changed: 88 additions & 80 deletions

src/applications/bmqstoragetool/bmqstoragetool.m.cpp

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,8 @@
3232
using namespace BloombergLP;
3333
using namespace m_bmqstoragetool;
3434

35-
static bool parseArgs(CommandLineArguments& arguments,
36-
int argc,
37-
const char* argv[],
38-
bslma::Allocator* allocator)
35+
static bool
36+
parseArgs(CommandLineArguments& arguments, int argc, const char* argv[])
3937
{
4038
bool showHelp = false;
4139

@@ -202,7 +200,7 @@ static bool parseArgs(CommandLineArguments& arguments,
202200
}
203201

204202
bsl::string error;
205-
if (!arguments.validate(&error, allocator)) {
203+
if (!arguments.validate(&error)) {
206204
bsl::cerr << "Arguments validation failed:\n" << error;
207205
return false; // RETURN
208206
}
@@ -229,7 +227,7 @@ int main(int argc, const char* argv[])
229227

230228
// Arguments parsing
231229
CommandLineArguments arguments(allocator);
232-
if (!parseArgs(arguments, argc, argv, allocator)) {
230+
if (!parseArgs(arguments, argc, argv)) {
233231
return rc_ARGUMENTS_PARSING_FAILED; // RETURN
234232
}
235233

src/applications/bmqstoragetool/m_bmqstoragetool_parameters.cpp

Lines changed: 44 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,11 @@
4343
#include <bsl_iostream.h>
4444
#include <bsl_sstream.h>
4545
#include <bsl_stdexcept.h>
46+
#include <bsl_string_view.h>
4647
#include <bsl_vector.h>
4748
#include <bslim_printer.h>
4849
#include <bslma_allocator.h>
50+
#include <bslma_default.h>
4951
#include <bsls_assert.h>
5052
#include <bsls_types.h>
5153

@@ -81,25 +83,27 @@ bool isValidSequenceNumber(bsl::ostream& error, const bsl::string& seqNumStr)
8183
return success;
8284
}
8385

86+
/// Record types constants
87+
const bsl::string_view k_ALL_TYPE = "all";
88+
const bsl::string_view k_MESSAGE_TYPE = "message";
89+
const bsl::string_view k_QUEUEOP_TYPE = "queue-op";
90+
const bsl::string_view k_JOURNALOP_TYPE = "journal-op";
91+
const bsl::string_view k_CSL_ALL_TYPE = "all";
92+
const bsl::string_view k_CSL_SNAPSHOT_TYPE = "snapshot";
93+
const bsl::string_view k_CSL_UPDATE_TYPE = "update";
94+
const bsl::string_view k_CSL_COMMIT_TYPE = "commit";
95+
const bsl::string_view k_CSL_ACK_TYPE = "ack";
96+
/// Print modes constants
97+
const bsl::string_view k_HUMAN_MODE = "human";
98+
const bsl::string_view k_JSON_PRETTY_MODE = "json-pretty";
99+
const bsl::string_view k_JSON_LINE_MODE = "json-line";
100+
84101
} // close unnamed namespace
85102

86103
// ==========================
87104
// class CommandLineArguments
88105
// ==========================
89106

90-
const char* CommandLineArguments::k_ALL_TYPE = "all";
91-
const char* CommandLineArguments::k_MESSAGE_TYPE = "message";
92-
const char* CommandLineArguments::k_QUEUEOP_TYPE = "queue-op";
93-
const char* CommandLineArguments::k_JOURNALOP_TYPE = "journal-op";
94-
const char* CommandLineArguments::k_CSL_ALL_TYPE = "all";
95-
const char* CommandLineArguments::k_CSL_SNAPSHOT_TYPE = "snapshot";
96-
const char* CommandLineArguments::k_CSL_UPDATE_TYPE = "update";
97-
const char* CommandLineArguments::k_CSL_COMMIT_TYPE = "commit";
98-
const char* CommandLineArguments::k_CSL_ACK_TYPE = "ack";
99-
const char* CommandLineArguments::k_HUMAN_MODE = "human";
100-
const char* CommandLineArguments::k_JSON_PRETTY_MODE = "json-pretty";
101-
const char* CommandLineArguments::k_JSON_LINE_MODE = "json-line";
102-
103107
CommandLineArguments::CommandLineArguments(bslma::Allocator* allocator)
104108
: d_recordType(allocator)
105109
, d_cslRecordType(allocator)
@@ -129,14 +133,14 @@ CommandLineArguments::CommandLineArguments(bslma::Allocator* allocator)
129133
, d_partiallyConfirmed(false)
130134
, d_minRecordsPerQueue(0)
131135
, d_cslSummaryQueuesLimit(0)
136+
, d_allocator_p(bslma::Default::allocator(allocator))
132137
{
133138
// NOTHING
134139
}
135140

136-
bool CommandLineArguments::validate(bsl::string* error_p,
137-
bslma::Allocator* allocator)
141+
bool CommandLineArguments::validate(bsl::string* error_p)
138142
{
139-
bmqu::MemOutStream ss(allocator);
143+
bmqu::MemOutStream ss(d_allocator_p);
140144

141145
// Determine the mode: journal or CSL iteration.
142146
bool validMode = true;
@@ -149,19 +153,18 @@ bool CommandLineArguments::validate(bsl::string* error_p,
149153
if (validMode) {
150154
if (!d_cslFile.empty() &&
151155
(d_journalPath.empty() && d_journalFile.empty())) {
152-
validateCslModeArgs(ss, allocator);
156+
validateCslModeArgs(ss);
153157
}
154158
else {
155-
validateJournalModeArgs(ss, allocator);
159+
validateJournalModeArgs(ss);
156160
}
157161
}
158162

159163
error_p->assign(ss.str().data(), ss.str().length());
160164
return error_p->empty();
161165
}
162166

163-
void CommandLineArguments::validateCslModeArgs(bsl::ostream& stream,
164-
bslma::Allocator* allocator)
167+
void CommandLineArguments::validateCslModeArgs(bsl::ostream& stream)
165168
{
166169
// Validate record types
167170
if (d_cslRecordType.size() > 4) {
@@ -174,7 +177,7 @@ void CommandLineArguments::validateCslModeArgs(bsl::ostream& stream,
174177
"passed.\n";
175178
}
176179

177-
const bool rangeArgPresent = validateRangeArgs(stream, allocator);
180+
const bool rangeArgPresent = validateRangeArgs(stream);
178181

179182
// Validate options compatibility
180183
if (!d_seqNum.empty() &&
@@ -194,7 +197,7 @@ void CommandLineArguments::validateCslModeArgs(bsl::ostream& stream,
194197
"specific enough to find a particular record\n";
195198
}
196199
if (!d_seqNum.empty()) {
197-
bmqu::MemOutStream errorDescr(allocator);
200+
bmqu::MemOutStream errorDescr(d_allocator_p);
198201
for (bsl::vector<bsl::string>::const_iterator cit = d_seqNum.begin();
199202
cit != d_seqNum.end();
200203
++cit) {
@@ -247,8 +250,7 @@ void CommandLineArguments::validateCslModeArgs(bsl::ostream& stream,
247250
"than zero.\n";
248251
}
249252

250-
void CommandLineArguments::validateJournalModeArgs(bsl::ostream& stream,
251-
bslma::Allocator* allocator)
253+
void CommandLineArguments::validateJournalModeArgs(bsl::ostream& stream)
252254
{
253255
// Validate record types
254256
if (d_recordType.size() > 3) {
@@ -316,7 +318,7 @@ void CommandLineArguments::validateJournalModeArgs(bsl::ostream& stream,
316318
"specified\n";
317319
}
318320

319-
const bool rangeArgPresent = validateRangeArgs(stream, allocator);
321+
const bool rangeArgPresent = validateRangeArgs(stream);
320322

321323
// Validate options compatibility
322324
if (!d_guid.empty() &&
@@ -346,7 +348,7 @@ void CommandLineArguments::validateJournalModeArgs(bsl::ostream& stream,
346348
"specific enough to find a particular message\n";
347349
}
348350
if (!d_seqNum.empty()) {
349-
bmqu::MemOutStream errorDescr(allocator);
351+
bmqu::MemOutStream errorDescr(d_allocator_p);
350352
for (bsl::vector<bsl::string>::const_iterator cit = d_seqNum.begin();
351353
cit != d_seqNum.end();
352354
++cit) {
@@ -400,16 +402,15 @@ void CommandLineArguments::validateJournalModeArgs(bsl::ostream& stream,
400402
stream << "Dump limit must be positive value greater than zero.\n";
401403
}
402404

403-
bool CommandLineArguments::validateRangeArgs(bsl::ostream& error,
404-
bslma::Allocator* allocator) const
405+
bool CommandLineArguments::validateRangeArgs(bsl::ostream& error) const
405406
{
406407
if (d_timestampLt < 0 || d_timestampGt < 0 ||
407408
(d_timestampLt > 0 && d_timestampGt >= d_timestampLt)) {
408409
error << "Invalid timestamp range specified\n";
409410
}
410411

411412
if (!d_seqNumLt.empty() || !d_seqNumGt.empty()) {
412-
bmqu::MemOutStream errorDescr(allocator);
413+
bmqu::MemOutStream errorDescr(d_allocator_p);
413414
CompositeSequenceNumber seqNumLt, seqNumGt;
414415
bool successLt = false;
415416
if (!d_seqNumLt.empty()) {
@@ -593,6 +594,7 @@ Parameters::Parameters(const CommandLineArguments& arguments,
593594
, d_confirmed(arguments.d_confirmed)
594595
, d_partiallyConfirmed(arguments.d_partiallyConfirmed)
595596
, d_cslSummaryQueuesLimit(arguments.d_cslSummaryQueuesLimit)
597+
, d_allocator_p(bslma::Default::allocator(allocator))
596598
{
597599
// Determine processing mode: process Journal or CSL file
598600
if (!arguments.d_cslFile.empty() &&
@@ -601,10 +603,10 @@ Parameters::Parameters(const CommandLineArguments& arguments,
601603
}
602604

603605
// Check print mode
604-
if (arguments.d_printMode == CommandLineArguments::k_JSON_PRETTY_MODE) {
606+
if (arguments.d_printMode == k_JSON_PRETTY_MODE) {
605607
d_printMode = e_JSON_PRETTY;
606608
}
607-
else if (arguments.d_printMode == CommandLineArguments::k_JSON_LINE_MODE) {
609+
else if (arguments.d_printMode == k_JSON_LINE_MODE) {
608610
d_printMode = e_JSON_LINE;
609611
}
610612
// Set record types to process
@@ -618,19 +620,19 @@ Parameters::Parameters(const CommandLineArguments& arguments,
618620
arguments.d_cslRecordType.begin();
619621
cit != arguments.d_cslRecordType.end();
620622
++cit) {
621-
if (*cit == CommandLineArguments::k_CSL_ALL_TYPE) {
623+
if (*cit == k_CSL_ALL_TYPE) {
622624
d_processCslRecordTypes.setAll();
623625
}
624-
else if (*cit == CommandLineArguments::k_CSL_SNAPSHOT_TYPE) {
626+
else if (*cit == k_CSL_SNAPSHOT_TYPE) {
625627
d_processCslRecordTypes.d_snapshot = true;
626628
}
627-
else if (*cit == CommandLineArguments::k_CSL_UPDATE_TYPE) {
629+
else if (*cit == k_CSL_UPDATE_TYPE) {
628630
d_processCslRecordTypes.d_update = true;
629631
}
630-
else if (*cit == CommandLineArguments::k_CSL_COMMIT_TYPE) {
632+
else if (*cit == k_CSL_COMMIT_TYPE) {
631633
d_processCslRecordTypes.d_commit = true;
632634
}
633-
else if (*cit == CommandLineArguments::k_CSL_ACK_TYPE) {
635+
else if (*cit == k_CSL_ACK_TYPE) {
634636
d_processCslRecordTypes.d_ack = true;
635637
}
636638
else {
@@ -649,17 +651,17 @@ Parameters::Parameters(const CommandLineArguments& arguments,
649651
arguments.d_recordType.begin();
650652
cit != arguments.d_recordType.end();
651653
++cit) {
652-
if (*cit == CommandLineArguments::k_ALL_TYPE) {
654+
if (*cit == k_ALL_TYPE) {
653655
d_processRecordTypes.setAll();
654656
break; // BREAK
655657
}
656-
else if (*cit == CommandLineArguments::k_MESSAGE_TYPE) {
658+
else if (*cit == k_MESSAGE_TYPE) {
657659
d_processRecordTypes.d_message = true;
658660
}
659-
else if (*cit == CommandLineArguments::k_QUEUEOP_TYPE) {
661+
else if (*cit == k_QUEUEOP_TYPE) {
660662
d_processRecordTypes.d_queueOp = true;
661663
}
662-
else if (*cit == CommandLineArguments::k_JOURNALOP_TYPE) {
664+
else if (*cit == k_JOURNALOP_TYPE) {
663665
d_processRecordTypes.d_journalOp = true;
664666
}
665667
else {
@@ -730,10 +732,10 @@ Parameters::Parameters(const CommandLineArguments& arguments,
730732
}
731733
}
732734

733-
void Parameters::validateQueueNames(bslma::Allocator* allocator) const
735+
void Parameters::validateQueueNames() const
734736
{
735737
// Validate given queue names agains existing in csl file
736-
bmqu::MemOutStream ss(allocator);
738+
bmqu::MemOutStream ss(d_allocator_p);
737739
bsl::vector<bsl::string>::const_iterator it = d_queueName.cbegin();
738740
for (; it != d_queueName.cend(); ++it) {
739741
if (!d_queueMap.findKeyByUri(*it).has_value()) {

src/applications/bmqstoragetool/m_bmqstoragetool_parameters.h

Lines changed: 23 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -29,21 +29,14 @@
2929
#include <m_bmqstoragetool_compositesequencenumber.h>
3030
#include <m_bmqstoragetool_queuemap.h>
3131

32-
// MQB
33-
#include <mqbs_datafileiterator.h>
34-
#include <mqbs_filestoreprotocol.h>
35-
#include <mqbs_journalfileiterator.h>
36-
#include <mqbs_mappedfiledescriptor.h>
37-
38-
// BMQ
39-
#include <bmqu_stringutil.h>
40-
4132
// BDE
4233
#include <bsl_iosfwd.h>
4334
#include <bsl_optional.h>
4435
#include <bsl_string.h>
4536
#include <bsl_vector.h>
4637
#include <bslma_allocator.h>
38+
#include <bslma_usesbslmaallocator.h>
39+
#include <bslmf_nestedtraitdeclaration.h>
4740
#include <bsls_types.h>
4841

4942
namespace BloombergLP {
@@ -58,20 +51,6 @@ class CommandLineArguments {
5851
public:
5952
// PUBLIC DATA
6053

61-
/// Record types constants
62-
static const char* k_ALL_TYPE;
63-
static const char* k_MESSAGE_TYPE;
64-
static const char* k_QUEUEOP_TYPE;
65-
static const char* k_JOURNALOP_TYPE;
66-
static const char* k_CSL_ALL_TYPE;
67-
static const char* k_CSL_SNAPSHOT_TYPE;
68-
static const char* k_CSL_UPDATE_TYPE;
69-
static const char* k_CSL_COMMIT_TYPE;
70-
static const char* k_CSL_ACK_TYPE;
71-
/// Print modes constants
72-
static const char* k_HUMAN_MODE;
73-
static const char* k_JSON_PRETTY_MODE;
74-
static const char* k_JSON_LINE_MODE;
7554
/// List of record types to process (message, journalOp, queueOp)
7655
bsl::vector<bsl::string> d_recordType;
7756
/// List of CSL record types to process (snapshot, update, commit, ack)
@@ -131,30 +110,37 @@ class CommandLineArguments {
131110
int d_cslSummaryQueuesLimit;
132111

133112
// CREATORS
113+
114+
// TRAITS
115+
BSLMF_NESTED_TRAIT_DECLARATION(CommandLineArguments,
116+
bslma::UsesBslmaAllocator)
117+
134118
explicit CommandLineArguments(bslma::Allocator* allocator = 0);
135119

136120
// MANIPULATORS
137121
/// Validate the consistency of all settings.
138-
bool validate(bsl::string* error, bslma::Allocator* allocator = 0);
122+
bool validate(bsl::string* error);
139123

140124
private:
125+
// PRIVATE DATA
126+
127+
/// Allocator used inside the class.
128+
bslma::Allocator* d_allocator_p;
129+
141130
// PRIVATE MANIPULATORS
142131

143132
/// Validate journal mode arguments. Write validation error into the
144133
/// specified `stream`.
145-
void validateJournalModeArgs(bsl::ostream& stream,
146-
bslma::Allocator* allocator = 0);
134+
void validateJournalModeArgs(bsl::ostream& stream);
147135

148136
// PRIVATE ACCESSORS
149137

150138
/// Validate CSL mode arguments. Write validation error into the specified
151139
/// `stream`.
152-
void validateCslModeArgs(bsl::ostream& stream,
153-
bslma::Allocator* allocator = 0);
140+
void validateCslModeArgs(bsl::ostream& stream);
154141
/// Validate range args. Return true if at least one range argument passed,
155142
/// false otherwise.
156-
bool validateRangeArgs(bsl::ostream& error,
157-
bslma::Allocator* allocator) const;
143+
bool validateRangeArgs(bsl::ostream& error) const;
158144

159145
public:
160146
// CLASS METHODS
@@ -298,13 +284,19 @@ struct Parameters {
298284
bsl::optional<bsls::Types::Uint64> d_minRecordsPerQueue;
299285
/// Limit number of queues to display in CSL file summary
300286
unsigned int d_cslSummaryQueuesLimit;
287+
/// Allocator used inside the class.
288+
bslma::Allocator* d_allocator_p;
301289

302290
// CREATORS
291+
292+
// TRAITS
293+
BSLMF_NESTED_TRAIT_DECLARATION(Parameters, bslma::UsesBslmaAllocator)
294+
303295
/// Constructor from the specified 'aruments'
304296
explicit Parameters(const CommandLineArguments& aruments,
305297
bslma::Allocator* allocator = 0);
306298

307-
void validateQueueNames(bslma::Allocator* allocator = 0) const;
299+
void validateQueueNames() const;
308300
};
309301

310302
} // close package namespace

src/applications/bmqstoragetool/m_bmqstoragetool_printer.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,10 @@
2323
#include <bmqu_jsonprinter.h>
2424

2525
// MQB
26+
#include <mqbs_datafileiterator.h>
2627
#include <mqbs_filestoreprotocol.h>
2728
#include <mqbs_filestoreprotocolprinter.h>
29+
#include <mqbs_journalfileiterator.h>
2830

2931
// BDE
3032
#include <bsl_algorithm.h>

0 commit comments

Comments
 (0)