Newer
Older
#include "MantidKernel/ArrayLengthValidator.h"
#include "MantidKernel/System.h"
using namespace Mantid::Kernel;
namespace Mantid
{
namespace Kernel
{
//----------------------------------------------------------------------------------------------
/** No arg constructor
*/
template <typename TYPE>
ArrayLengthValidator<TYPE>::ArrayLengthValidator():TypedValidator<std::vector<TYPE> >(),m_arraySize(size_t(0)),m_hasArraySize(false),
m_arraySizeMin(size_t(0)),m_hasArraySizeMin(false),m_arraySizeMax(size_t(0)),m_hasArraySizeMax(false)
{
}
//----------------------------------------------------------------------------------------------
/** Constructor
* @param len:: the legth of the array
*/
template <typename TYPE>
ArrayLengthValidator<TYPE>::ArrayLengthValidator(const size_t len):TypedValidator<std::vector<TYPE> >(),m_arraySize(size_t(len)),m_hasArraySize(true),
m_arraySizeMin(size_t(0)),m_hasArraySizeMin(false),m_arraySizeMax(size_t(0)),m_hasArraySizeMax(false)
{
}
//----------------------------------------------------------------------------------------------
/** Constructor
* @param lenmin:: the minimum legth of the array
* @param lenmax:: the maximum legth of the array
*/
template <typename TYPE>
ArrayLengthValidator<TYPE>::ArrayLengthValidator(const size_t lenmin, const size_t lenmax):TypedValidator<std::vector<TYPE> >(),m_arraySize(size_t(0)),
m_hasArraySize(false), m_arraySizeMin(size_t(lenmin)),m_hasArraySizeMin(true),m_arraySizeMax(size_t(lenmax)),m_hasArraySizeMax(true)
{
}
//----------------------------------------------------------------------------------------------
/** Destructor
*/
template <typename TYPE>
ArrayLengthValidator<TYPE>::~ArrayLengthValidator()
{
}
/**
Check if length is set
@returns true/false
*/
template <typename TYPE>
bool ArrayLengthValidator<TYPE>::hasLength() const
{
return this->m_hasArraySize;
}
/**
Check if minimum length is set
@returns true/false
*/
template <typename TYPE>
bool ArrayLengthValidator<TYPE>::hasMinLength() const
{
return this->m_hasArraySizeMin;
}
/**
Check if maximum length is set
@returns true/false
*/
template <typename TYPE>
bool ArrayLengthValidator<TYPE>::hasMaxLength() const
{
return this->m_hasArraySizeMax;
}
/**
Function to retun the set length
@returns m_arraySize
*/
template <typename TYPE>
const size_t& ArrayLengthValidator<TYPE>:: getLength() const
{
return this->m_arraySize;
}
Function to retun the set minimum length
@returns m_arraySize
*/
template <typename TYPE>
const size_t& ArrayLengthValidator<TYPE>:: getMinLength() const
{
return this->m_arraySizeMin;
}
/**
Function to retun the set maximum length
@returns m_arraySize
*/
template <typename TYPE>
const size_t& ArrayLengthValidator<TYPE>:: getMaxLength() const
{
return this->m_arraySizeMax;
}
/**
Function to set the length. It will automatically clear the minimum and maximum
template <typename TYPE>
void ArrayLengthValidator<TYPE>::setLength(const size_t &value)
{
this->m_hasArraySize=true;
this->m_arraySize=value;
this->clearLengthMax();
this->clearLengthMin();
}
/**
Function to set the minimum length. It will automatically clear the set length
@param value:: size_t type
*/
template <typename TYPE>
void ArrayLengthValidator<TYPE>::setLengthMin(const size_t &value)
{
this->m_hasArraySizeMin=true;
this->m_arraySizeMin=value;
this->clearLength();
}
/**
Function to set the maximum length. It will automatically clear the set length
@param value:: size_t type
*/
template <typename TYPE>
void ArrayLengthValidator<TYPE>::setLengthMax(const size_t &value)
{
this->m_hasArraySizeMax=true;
this->m_arraySizeMax=value;
this->clearLength();
/**
Function to unset the length. It sets m_hasArraySize to false, and the m_arraySize to 0
*/
template <typename TYPE>
void ArrayLengthValidator<TYPE>::clearLength()
{
this->m_hasArraySize=false;
this->m_arraySize=size_t(0);
}
/**
Function to unset the minimum length. It sets m_hasArraySizeMin to false, and the m_arraySizeMin to 0
*/
template <typename TYPE>
void ArrayLengthValidator<TYPE>::clearLengthMin()
{
this->m_hasArraySizeMin=false;
this->m_arraySizeMin=size_t(0);
}
/**
Function to unset the maximum length. It sets m_hasArraySizeMax to false, and the m_arraySizeMax to 0
*/
template <typename TYPE>
void ArrayLengthValidator<TYPE>::clearLengthMax()
{
this->m_hasArraySizeMax=false;
this->m_arraySizeMax=size_t(0);
}
/**
Clone function
@returns a clone of the validator
*/
IValidator_sptr ArrayLengthValidator<TYPE>::clone() const
return boost::make_shared<ArrayLengthValidator>(*this);
/**
Private function to check validity
@returns a string. The string is emty if everything is OK, otherwise returns the error
*/
template <typename TYPE>
std::string ArrayLengthValidator<TYPE>::checkValidity( const std::vector<TYPE> &value ) const
{
if (this->hasLength()&&value.size()!=this->m_arraySize )
{
return "Incorrect size";
}
if (this->hasMinLength() && value.size()<this->m_arraySizeMin)
{
return "Array size too short";
}
if (this->hasMaxLength() && value.size()>this->m_arraySizeMax)
return "Array size too long";
return "";
// Required explicit instantiations
template class ArrayLengthValidator<double>;
template class ArrayLengthValidator<int>;
template class ArrayLengthValidator<long>;
template class ArrayLengthValidator<std::string>;
} // namespace Mantid
} // namespace Kernel