Coverage Report

Created: 2023-06-07 06:59

/src/valijson/include/valijson/constraints/basic_constraint.hpp
Line
Count
Source (jump to first uncovered line)
1
#pragma once
2
3
#include <valijson/constraints/constraint.hpp>
4
#include <valijson/constraints/constraint_visitor.hpp>
5
#include <valijson/internal/custom_allocator.hpp>
6
#include <valijson/exceptions.hpp>
7
8
namespace valijson {
9
namespace constraints {
10
11
/**
12
 * @brief   Template class that implements the accept() and clone() functions of the Constraint interface.
13
 *
14
 * @tparam  ConstraintType   name of the concrete constraint type, which must provide a copy constructor.
15
 */
16
template<typename ConstraintType>
17
struct BasicConstraint: Constraint
18
{
19
    typedef internal::CustomAllocator<void *> Allocator;
20
21
    typedef std::basic_string<char, std::char_traits<char>, internal::CustomAllocator<char>> String;
22
23
    BasicConstraint()
24
0
      : m_allocator() { }
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::AllOfConstraint>::BasicConstraint()
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::AnyOfConstraint>::BasicConstraint()
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::ConstConstraint>::BasicConstraint()
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::ContainsConstraint>::BasicConstraint()
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::DependenciesConstraint>::BasicConstraint()
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::MultipleOfIntConstraint>::BasicConstraint()
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::MultipleOfDoubleConstraint>::BasicConstraint()
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::EnumConstraint>::BasicConstraint()
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::FormatConstraint>::BasicConstraint()
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::SingularItemsConstraint>::BasicConstraint()
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::LinearItemsConstraint>::BasicConstraint()
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::ConditionalConstraint>::BasicConstraint()
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::MaximumConstraint>::BasicConstraint()
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::MaxItemsConstraint>::BasicConstraint()
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::MaxLengthConstraint>::BasicConstraint()
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::MaxPropertiesConstraint>::BasicConstraint()
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::MinimumConstraint>::BasicConstraint()
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::MinItemsConstraint>::BasicConstraint()
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::MinLengthConstraint>::BasicConstraint()
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::MinPropertiesConstraint>::BasicConstraint()
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::NotConstraint>::BasicConstraint()
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::OneOfConstraint>::BasicConstraint()
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::PatternConstraint>::BasicConstraint()
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::PropertiesConstraint>::BasicConstraint()
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::PropertyNamesConstraint>::BasicConstraint()
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::RequiredConstraint>::BasicConstraint()
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::TypeConstraint>::BasicConstraint()
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::UniqueItemsConstraint>::BasicConstraint()
25
26
    BasicConstraint(Allocator::CustomAlloc allocFn, Allocator::CustomFree freeFn)
27
      : m_allocator(allocFn, freeFn) { }
28
29
    BasicConstraint(const BasicConstraint &other)
30
0
      : m_allocator(other.m_allocator) { }
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::AllOfConstraint>::BasicConstraint(valijson::constraints::BasicConstraint<valijson::constraints::AllOfConstraint> const&)
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::AnyOfConstraint>::BasicConstraint(valijson::constraints::BasicConstraint<valijson::constraints::AnyOfConstraint> const&)
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::ConstConstraint>::BasicConstraint(valijson::constraints::BasicConstraint<valijson::constraints::ConstConstraint> const&)
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::ContainsConstraint>::BasicConstraint(valijson::constraints::BasicConstraint<valijson::constraints::ContainsConstraint> const&)
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::DependenciesConstraint>::BasicConstraint(valijson::constraints::BasicConstraint<valijson::constraints::DependenciesConstraint> const&)
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::MultipleOfIntConstraint>::BasicConstraint(valijson::constraints::BasicConstraint<valijson::constraints::MultipleOfIntConstraint> const&)
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::MultipleOfDoubleConstraint>::BasicConstraint(valijson::constraints::BasicConstraint<valijson::constraints::MultipleOfDoubleConstraint> const&)
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::EnumConstraint>::BasicConstraint(valijson::constraints::BasicConstraint<valijson::constraints::EnumConstraint> const&)
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::FormatConstraint>::BasicConstraint(valijson::constraints::BasicConstraint<valijson::constraints::FormatConstraint> const&)
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::SingularItemsConstraint>::BasicConstraint(valijson::constraints::BasicConstraint<valijson::constraints::SingularItemsConstraint> const&)
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::LinearItemsConstraint>::BasicConstraint(valijson::constraints::BasicConstraint<valijson::constraints::LinearItemsConstraint> const&)
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::ConditionalConstraint>::BasicConstraint(valijson::constraints::BasicConstraint<valijson::constraints::ConditionalConstraint> const&)
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::MaximumConstraint>::BasicConstraint(valijson::constraints::BasicConstraint<valijson::constraints::MaximumConstraint> const&)
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::MaxItemsConstraint>::BasicConstraint(valijson::constraints::BasicConstraint<valijson::constraints::MaxItemsConstraint> const&)
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::MaxLengthConstraint>::BasicConstraint(valijson::constraints::BasicConstraint<valijson::constraints::MaxLengthConstraint> const&)
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::MaxPropertiesConstraint>::BasicConstraint(valijson::constraints::BasicConstraint<valijson::constraints::MaxPropertiesConstraint> const&)
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::MinimumConstraint>::BasicConstraint(valijson::constraints::BasicConstraint<valijson::constraints::MinimumConstraint> const&)
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::MinItemsConstraint>::BasicConstraint(valijson::constraints::BasicConstraint<valijson::constraints::MinItemsConstraint> const&)
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::MinLengthConstraint>::BasicConstraint(valijson::constraints::BasicConstraint<valijson::constraints::MinLengthConstraint> const&)
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::MinPropertiesConstraint>::BasicConstraint(valijson::constraints::BasicConstraint<valijson::constraints::MinPropertiesConstraint> const&)
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::NotConstraint>::BasicConstraint(valijson::constraints::BasicConstraint<valijson::constraints::NotConstraint> const&)
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::OneOfConstraint>::BasicConstraint(valijson::constraints::BasicConstraint<valijson::constraints::OneOfConstraint> const&)
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::PatternConstraint>::BasicConstraint(valijson::constraints::BasicConstraint<valijson::constraints::PatternConstraint> const&)
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::PropertiesConstraint>::BasicConstraint(valijson::constraints::BasicConstraint<valijson::constraints::PropertiesConstraint> const&)
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::PropertyNamesConstraint>::BasicConstraint(valijson::constraints::BasicConstraint<valijson::constraints::PropertyNamesConstraint> const&)
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::RequiredConstraint>::BasicConstraint(valijson::constraints::BasicConstraint<valijson::constraints::RequiredConstraint> const&)
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::TypeConstraint>::BasicConstraint(valijson::constraints::BasicConstraint<valijson::constraints::TypeConstraint> const&)
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::UniqueItemsConstraint>::BasicConstraint(valijson::constraints::BasicConstraint<valijson::constraints::UniqueItemsConstraint> const&)
31
32
    ~BasicConstraint() override = default;
33
34
    bool accept(ConstraintVisitor &visitor) const override
35
0
    {
36
0
        return visitor.visit(*static_cast<const ConstraintType*>(this));
37
0
    }
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::AllOfConstraint>::accept(valijson::constraints::ConstraintVisitor&) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::AnyOfConstraint>::accept(valijson::constraints::ConstraintVisitor&) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::ConstConstraint>::accept(valijson::constraints::ConstraintVisitor&) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::ContainsConstraint>::accept(valijson::constraints::ConstraintVisitor&) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::DependenciesConstraint>::accept(valijson::constraints::ConstraintVisitor&) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::MultipleOfIntConstraint>::accept(valijson::constraints::ConstraintVisitor&) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::MultipleOfDoubleConstraint>::accept(valijson::constraints::ConstraintVisitor&) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::EnumConstraint>::accept(valijson::constraints::ConstraintVisitor&) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::FormatConstraint>::accept(valijson::constraints::ConstraintVisitor&) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::SingularItemsConstraint>::accept(valijson::constraints::ConstraintVisitor&) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::LinearItemsConstraint>::accept(valijson::constraints::ConstraintVisitor&) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::ConditionalConstraint>::accept(valijson::constraints::ConstraintVisitor&) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::MaximumConstraint>::accept(valijson::constraints::ConstraintVisitor&) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::MaxItemsConstraint>::accept(valijson::constraints::ConstraintVisitor&) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::MaxLengthConstraint>::accept(valijson::constraints::ConstraintVisitor&) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::MaxPropertiesConstraint>::accept(valijson::constraints::ConstraintVisitor&) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::MinimumConstraint>::accept(valijson::constraints::ConstraintVisitor&) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::MinItemsConstraint>::accept(valijson::constraints::ConstraintVisitor&) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::MinLengthConstraint>::accept(valijson::constraints::ConstraintVisitor&) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::MinPropertiesConstraint>::accept(valijson::constraints::ConstraintVisitor&) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::NotConstraint>::accept(valijson::constraints::ConstraintVisitor&) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::OneOfConstraint>::accept(valijson::constraints::ConstraintVisitor&) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::PatternConstraint>::accept(valijson::constraints::ConstraintVisitor&) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::PropertiesConstraint>::accept(valijson::constraints::ConstraintVisitor&) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::PropertyNamesConstraint>::accept(valijson::constraints::ConstraintVisitor&) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::RequiredConstraint>::accept(valijson::constraints::ConstraintVisitor&) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::TypeConstraint>::accept(valijson::constraints::ConstraintVisitor&) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::UniqueItemsConstraint>::accept(valijson::constraints::ConstraintVisitor&) const
38
39
    OwningPointer clone(CustomAlloc allocFn, CustomFree freeFn) const override
40
0
    {
41
        // smart pointer to automatically free raw memory on exception
42
0
        typedef std::unique_ptr<Constraint, CustomFree> RawOwningPointer;
43
0
        auto ptr = RawOwningPointer(static_cast<Constraint*>(allocFn(sizeof(ConstraintType))), freeFn);
44
0
        if (!ptr) {
45
0
            throwRuntimeError("Failed to allocate memory for cloned constraint");
46
0
        }
47
48
        // constructor might throw but the memory will be taken care of anyways
49
0
        (void)new (ptr.get()) ConstraintType(*static_cast<const ConstraintType*>(this));
50
51
        // implicitly convert to smart pointer that will also destroy object instance
52
0
        return ptr;
53
0
    }
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::AllOfConstraint>::clone(void* (*)(unsigned long), void (*)(void*)) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::AnyOfConstraint>::clone(void* (*)(unsigned long), void (*)(void*)) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::ConstConstraint>::clone(void* (*)(unsigned long), void (*)(void*)) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::ContainsConstraint>::clone(void* (*)(unsigned long), void (*)(void*)) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::DependenciesConstraint>::clone(void* (*)(unsigned long), void (*)(void*)) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::MultipleOfIntConstraint>::clone(void* (*)(unsigned long), void (*)(void*)) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::MultipleOfDoubleConstraint>::clone(void* (*)(unsigned long), void (*)(void*)) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::EnumConstraint>::clone(void* (*)(unsigned long), void (*)(void*)) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::FormatConstraint>::clone(void* (*)(unsigned long), void (*)(void*)) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::SingularItemsConstraint>::clone(void* (*)(unsigned long), void (*)(void*)) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::LinearItemsConstraint>::clone(void* (*)(unsigned long), void (*)(void*)) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::ConditionalConstraint>::clone(void* (*)(unsigned long), void (*)(void*)) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::MaximumConstraint>::clone(void* (*)(unsigned long), void (*)(void*)) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::MaxItemsConstraint>::clone(void* (*)(unsigned long), void (*)(void*)) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::MaxLengthConstraint>::clone(void* (*)(unsigned long), void (*)(void*)) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::MaxPropertiesConstraint>::clone(void* (*)(unsigned long), void (*)(void*)) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::MinimumConstraint>::clone(void* (*)(unsigned long), void (*)(void*)) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::MinItemsConstraint>::clone(void* (*)(unsigned long), void (*)(void*)) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::MinLengthConstraint>::clone(void* (*)(unsigned long), void (*)(void*)) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::MinPropertiesConstraint>::clone(void* (*)(unsigned long), void (*)(void*)) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::NotConstraint>::clone(void* (*)(unsigned long), void (*)(void*)) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::OneOfConstraint>::clone(void* (*)(unsigned long), void (*)(void*)) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::PatternConstraint>::clone(void* (*)(unsigned long), void (*)(void*)) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::PropertiesConstraint>::clone(void* (*)(unsigned long), void (*)(void*)) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::PropertyNamesConstraint>::clone(void* (*)(unsigned long), void (*)(void*)) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::RequiredConstraint>::clone(void* (*)(unsigned long), void (*)(void*)) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::TypeConstraint>::clone(void* (*)(unsigned long), void (*)(void*)) const
Unexecuted instantiation: valijson::constraints::BasicConstraint<valijson::constraints::UniqueItemsConstraint>::clone(void* (*)(unsigned long), void (*)(void*)) const
54
55
protected:
56
57
    Allocator m_allocator;
58
};
59
60
} // namespace constraints
61
} // namespace valijson