Opened 15 years ago

Closed 15 years ago

Last modified 15 years ago

#824 closed Enhancement (fixed)

Code using reply->insert_message could be simplified

Reported by: Nicolas Owned by: davea
Priority: Minor Milestone: Undetermined
Component: Server - Scheduler Version:
Keywords: Cc: Pepo

Description

Currently, to add a USER_MESSAGE to the scheduler reply, you always need code like this:

sprintf(message,
    "%s is not available for your type of computer.",
    app->user_friendly_name
);
USER_MESSAGE um(message, "high");
g_wreq->insert_no_work_message(um);

The separate um variable is required, otherwise it doesn't compile. The reason is that insert_no_work_message and others take a non-const USER_MESSAGE&. Since you can't modify temporary objects (a non-const reference implies the object will be modified, which actually isn't the case), you need a separate variable.

By making the arguments const, for example:

-void WORK_REQ::insert_no_work_message(USER_MESSAGE& um) {
+void WORK_REQ::insert_no_work_message(const USER_MESSAGE& um) {

you can now add messages using a single statement, with no temporary variable needed:

g_reply->insert_message(USER_MESSAGE(
    "Unable to send work to Vista with BOINC installed in protected mode", "high"
));
g_reply->insert_message(USER_MESSAGE(
    "Please reinstall BOINC and uncheck 'Protected application execution'", "high"
));

But on second thought, it would be even better if insert_message took two const char*s as arguments and created the USER_MESSAGE object, so "client code" doesn't have to do it.

void SCHEDULER_REPLY::insert_message(const char* message, const char* priority) {
    USER_MESSAGE um(message, priority);
    messages.push_back(um);
}
...
g_reply->insert_message("No work available", "low");

Change History (5)

comment:1 Changed 15 years ago by Nicolas

And priorities should be part of an enum, not strings.

comment:2 Changed 15 years ago by Pepo

Cc: Pepo added

comment:3 Changed 15 years ago by romw

Owner: changed from Bruce Allen to davea

comment:4 Changed 15 years ago by davea

Resolution: fixed
Status: newclosed

fixed in [17395]

comment:5 Changed 15 years ago by Nicolas

Further fixed (using the last suggestion) in [18896].

Note: See TracTickets for help on using tickets.