FOSSredder 0.5.0
Loading...
Searching...
No Matches
StatementPolicy.cpp
Go to the documentation of this file.
1
5
7
9
10#include <algorithm>
11#include <iterator>
12#include <utility>
13
15
16std::string trimCopy(std::string value) {
17 return core::utils::trim(std::move(value));
18}
19
20std::string normalizeId(std::string value) {
21 return trimCopy(std::move(value));
22}
23
24void normalizeIds(std::vector<std::string>& values) {
25 std::vector<std::string> unique;
26 unique.reserve(values.size());
27 for (auto& value : values) {
28 value = normalizeId(std::move(value));
29 if (value.empty()) {
30 continue;
31 }
32 if (std::find(unique.begin(), unique.end(), value) != unique.end()) {
33 continue;
34 }
35 unique.push_back(value);
36 }
37 values = std::move(unique);
38}
39
40bool containsTransactionId(const std::vector<std::string>& transactionIds, const std::string& value) {
41 const auto normalized = normalizeId(value);
42 return std::find(transactionIds.begin(), transactionIds.end(), normalized) != transactionIds.end();
43}
44
45std::size_t indexOfTransactionId(const std::vector<std::string>& transactionIds, const std::string& value) {
46 const auto normalized = normalizeId(value);
47 const auto it = std::find(transactionIds.begin(), transactionIds.end(), normalized);
48 if (it == transactionIds.end()) {
49 return transactionIds.size();
50 }
51 return static_cast<std::size_t>(std::distance(transactionIds.begin(), it));
52}
53
54bool hasUniqueTransactionIds(const std::vector<std::string>& transactionIds) {
55 std::vector<std::string> unique;
56 unique.reserve(transactionIds.size());
57 for (const auto& transactionId : transactionIds) {
58 if (transactionId.empty()) {
59 continue;
60 }
61 if (std::find(unique.begin(), unique.end(), transactionId) != unique.end()) {
62 return false;
63 }
64 unique.push_back(transactionId);
65 }
66 return true;
67}
68
69} // namespace core::domain::policies::statement
Shared statement membership and normalization helpers.
Declares private string helpers shared across core implementation files.
void normalizeIds(std::vector< std::string > &values)
Normalizes and deduplicates transaction identifiers.
bool hasUniqueTransactionIds(const std::vector< std::string > &transactionIds)
Checks whether a transaction id list contains duplicates.
bool containsTransactionId(const std::vector< std::string > &transactionIds, const std::string &value)
Checks whether a statement already contains a transaction id.
std::string trimCopy(std::string value)
Trims leading and trailing whitespace from text.
std::size_t indexOfTransactionId(const std::vector< std::string > &transactionIds, const std::string &value)
Returns the index of a transaction id.
std::string normalizeId(std::string value)
Normalizes a transaction identifier.
std::string trim(std::string s)
Removes leading and trailing ASCII whitespace from a string.