feat(linear-static-3d-euler-beam): step 8 - core-diagnostics

This commit is contained in:
KOKO\Mimi
2026-08-09 11:11:13 +09:00
parent 639f4082c8
commit 4856f06869
11 changed files with 409 additions and 0 deletions
+2
View File
@@ -2,6 +2,8 @@ add_library(
fesa_solver
STATIC
build_info.cpp
core/diagnostic.cpp
core/status.cpp
)
target_include_directories(
+30
View File
@@ -0,0 +1,30 @@
#include "fesa/core/diagnostic.hpp"
#include <algorithm>
#include <tuple>
namespace fesa {
void sortDiagnostics(std::vector<Diagnostic>& diagnostics) {
// stable_sort makes discovery order the final tie-breaker without storing it
// in the externally visible Diagnostic record.
std::stable_sort(
diagnostics.begin(),
diagnostics.end(),
[](const Diagnostic& left, const Diagnostic& right) {
return std::tie(
left.location.file,
left.location.line,
left.keyword,
left.entityIdentity,
left.code) <
std::tie(
right.location.file,
right.location.line,
right.keyword,
right.entityIdentity,
right.code);
});
}
} // namespace fesa
+42
View File
@@ -0,0 +1,42 @@
#include "fesa/core/status.hpp"
#include <utility>
namespace fesa {
Status Status::ok() {
return Status{true, std::nullopt, {}};
}
Status Status::failure(std::vector<Diagnostic> diagnostics) {
sortDiagnostics(diagnostics);
return Status{false, std::nullopt, std::move(diagnostics)};
}
Status Status::failure(
FailureCategory category, std::vector<Diagnostic> diagnostics) {
sortDiagnostics(diagnostics);
return Status{false, category, std::move(diagnostics)};
}
bool Status::isOk() const noexcept {
return isOk_;
}
std::optional<FailureCategory> Status::failureCategory() const noexcept {
return category_;
}
const std::vector<Diagnostic>& Status::diagnostics() const noexcept {
return diagnostics_;
}
Status::Status(
bool isOk,
std::optional<FailureCategory> category,
std::vector<Diagnostic> diagnostics)
: isOk_{isOk},
category_{category},
diagnostics_{std::move(diagnostics)} {}
} // namespace fesa