Skip to content

Commit

Permalink
prettier joining of empty comments (#9)
Browse files Browse the repository at this point in the history
  • Loading branch information
togaen committed Oct 19, 2020
1 parent c31d6a7 commit ed7b93e
Showing 1 changed file with 26 additions and 4 deletions.
30 changes: 26 additions & 4 deletions include/contracts_lite/contract_types.hpp
Expand Up @@ -87,6 +87,24 @@ struct ReturnStatus {

std::string comment; // TODO(jeff): use std::string_view in C++17
const bool status;

friend ReturnStatus operator&&(const ReturnStatus& rs1,
const ReturnStatus& rs2);

friend ReturnStatus operator||(const ReturnStatus& rs1,
const ReturnStatus& rs2);

private:
static std::string join_comments(const std::string& conjunction,
const std::string& comment1,
const std::string comment2) {
if (comment1.empty()) {
return comment2;
} else if (comment2.empty()) {
return comment1;
}
return (comment1 + conjunction + comment2);
}
};

/**
Expand All @@ -97,13 +115,17 @@ struct ReturnStatus {
*/
inline ReturnStatus operator&&(const ReturnStatus& rs1,
const ReturnStatus& rs2) {
return ReturnStatus(rs1.comment + "; AND " + rs2.comment,
(rs1.status && rs2.status));
const auto conjunction = "; AND ";
auto comment =
ReturnStatus::join_comments(conjunction, rs1.comment, rs2.comment);
return ReturnStatus(std::move(comment), (rs1.status && rs2.status));
}
inline ReturnStatus operator||(const ReturnStatus& rs1,
const ReturnStatus& rs2) {
return ReturnStatus(rs1.comment + "; OR " + rs2.comment,
(rs1.status || rs2.status));
const auto conjunction = "; OR ";
auto comment =
ReturnStatus::join_comments(conjunction, rs1.comment, rs2.comment);
return ReturnStatus(std::move(comment), (rs1.status || rs2.status));
}

/** @brief Data structure for information describing contract violations. */
Expand Down

0 comments on commit ed7b93e

Please sign in to comment.