11#include "MantidKernel/DllConfig.h"
29template <
typename HeldType>
class MANTID_KERNEL_DLL TypedValidator :
public IValidator {
31template <
typename HeldType>
class TypedValidator :
public IValidator {
34 TypedValidator() =
default;
35 TypedValidator(
const TypedValidator &) =
default;
36 TypedValidator(TypedValidator &&);
37 TypedValidator &operator=(
const TypedValidator &) =
default;
38 TypedValidator &operator=(TypedValidator &&);
39 ~TypedValidator()
override =
default;
43 virtual std::string checkValidity(
const HeldType &)
const = 0;
52 std::string check(
const boost::any &
value)
const override {
54 const HeldType *dataPtr = boost::any_cast<const HeldType *>(
value);
55 return checkValidity(*dataPtr);
56 }
catch (boost::bad_any_cast &) {
57 return "Value was not of expected type.";
65template <
typename HeldType> TypedValidator<HeldType>::TypedValidator(TypedValidator &&) =
default;
66template <
typename HeldType> TypedValidator<HeldType> &TypedValidator<HeldType>::operator=(TypedValidator &&) =
default;
81template <
typename ElementType>
82class MANTID_KERNEL_DLL TypedValidator<
std::shared_ptr<ElementType>> :
public IValidator {
84template <
typename ElementType>
class TypedValidator<
std::shared_ptr<ElementType>> :
public IValidator {
87 using ElementType_sptr = std::shared_ptr<ElementType>;
91 virtual std::string checkValidity(
const ElementType_sptr &)
const = 0;
102 std::string check(
const boost::any &
value)
const override {
104 const ElementType_sptr typedValue = extractValue(
value);
105 return checkValidity(typedValue);
106 }
catch (std::invalid_argument &exc) {
115 ElementType_sptr extractValue(
const boost::any &
value)
const {
120 if (
value.type().hash_code() == dataitemTypeID().hash_code())
122 if (
value.type() == dataitemTypeID())
125 return extractFromDataItem(
value);
127 return extractFromSharedPtr(
value);
135 ElementType_sptr extractFromDataItem(
const boost::any &
value)
const {
138 ElementType_sptr typedValue = std::dynamic_pointer_cast<ElementType>(data);
140 throw std::invalid_argument(
"DataItem \"" + data->getName() +
"\" is not of the expected type.");
149 ElementType_sptr extractFromSharedPtr(
const boost::any &
value)
const {
151 return boost::any_cast<ElementType_sptr>(
value);
152 }
catch (boost::bad_any_cast &) {
153 throw std::invalid_argument(
"Value was not a shared_ptr type");
157 static const std::type_info &dataitemTypeID() {
return typeid(std::shared_ptr<DataItem>); }
double value
The value of the point.
std::shared_ptr< DataItem > DataItem_sptr
Shared pointer to a DataItem.
MANTID_KERNEL_EXTERN_TEMPLATE(PropertyWithValue< Matrix< float > >)
Helper class which provides the Collimation Length for SANS instruments.