Program Listing for File ValidationContext.hpp
↰ Return to documentation for file (src/navtk/utils/ValidationContext.hpp)
#pragma once
#include <list>
#include <memory>
#include <string>
#include <navtk/errors.hpp>
#include <navtk/not_null.hpp>
#include <navtk/tensors.hpp>
#include <navtk/utils/ValidationResult.hpp>
namespace navtk {
namespace utils {
class DimensionValidator;
class ValidationContext {
public:
ValidationContext();
ValidationContext(ErrorMode mode);
~ValidationContext();
ValidationContext(const ValidationContext& other) = delete;
ValidationContext(ValidationContext&& other) = delete;
ValidationContext& operator=(const ValidationContext& other) = delete;
ValidationContext& operator=(ValidationContext&& other) = delete;
ValidationContext& add_matrix(const Matrix& matrix);
ValidationContext& add_matrix(const Matrix& matrix, const std::string& name);
ValidationContext& add_matrix(const Vector& matrix);
ValidationContext& add_matrix(const Vector& matrix, const std::string& name);
ValidationContext& symmetric(double rtol = 1e-5, double atol = 1e-8);
ValidationContext& max(double limit);
ValidationContext& min(double limit);
ValidationContext& dim(Size rows, Size cols);
ValidationContext& dim(Size rows, int cols);
ValidationContext& dim(int rows, Size cols);
ValidationContext& dim(int rows, int cols);
ValidationContext& dim(int rows, char cols);
ValidationContext& dim(Size rows, char cols);
ValidationContext& dim(char rows, int cols);
ValidationContext& dim(char rows, Size cols);
ValidationContext& dim(char rows, char cols);
// ValidationContext& transposable();
ValidationResult validate();
ErrorMode get_mode() const;
bool is_enabled() const;
operator bool() const;
protected:
not_null<std::unique_ptr<DimensionValidator>> dimension_validator;
std::list<std::pair<Matrix, std::string>> matrices_to_validate;
const Matrix* current_matrix;
const std::string* current_matrix_name;
bool check_current_matrix() const;
void mark_validation_needed();
bool validation_needed() const;
ValidationResult cached_result;
ErrorMode mode;
};
} // namespace utils
} // namespace navtk