/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 |