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