Newer
Older
#include "MantidKernel/Exception.h"
Janik Zikovsky
committed
#include <string>
#include <sstream>
namespace Mantid
{
namespace Kernel
{
/** Constructor
Janik Zikovsky
committed
* @param name :: The name of the property
* @param type :: The type of the property
* @param direction :: Whether this is a Direction::Input, Direction::Output or Direction::InOut (Input & Output) property
Roman Tolchenov
committed
Property::Property( const std::string &name, const std::type_info &type, const unsigned int direction ) :
m_name( name ),
m_documentation( "" ),
Roman Tolchenov
committed
m_typeinfo( &type ),
Janik Zikovsky
committed
m_direction( direction ),
m_units("")
Roman Tolchenov
committed
// Make sure a random int hasn't been passed in for the direction
// Property & PropertyWithValue destructors will be called in this case
if (m_direction > 2) throw std::out_of_range("direction should be a member of the Direction enum");
}
/// Copy constructor
Property::Property( const Property& right ) :
m_name( right.m_name ),
m_documentation( right.m_documentation ),
Roman Tolchenov
committed
m_typeinfo( right.m_typeinfo ),
Janik Zikovsky
committed
m_direction( right.m_direction ),
m_units( right.m_units)
{
}
/// Virtual destructor
Property::~Property()
{
}
Janik Zikovsky
committed
* @param right :: The right hand side value
//Property& Property::operator=( const Property& right )
//{
// UNUSED_ARG(right);
// return *this;
//}
/** Get the property's name
* @return The name of the property
*/
const std::string& Property::name() const
{
return m_name;
}
/** Get the property's documentation string
* @return The documentation string
*/
const std::string& Property::documentation() const
{
return m_documentation;
}
/** Get the property type_info
* @return The type of the property
*/
const std::type_info* Property::type_info() const
{
return m_typeinfo;
}
/** Returns the type of the property as a string.
* Note that this is implementation dependent.
* @return The property type
*/
const std::string Property::type() const
{
Gigg, Martyn Anthony
committed
return Mantid::Kernel::getUnmangledTypeName(*m_typeinfo);
/** Overridden functions checks whether the property has a valid value.
*
* @return empty string ""
*/
std::string Property::isValid() const
{
// the no error condition
return "";
}
Michael Whitty
committed
/**
* Whether to remember this property input
* @return whether to remember this property's input
*/
bool Property::remember() const
{
return true;
}
/** Sets the property's (optional) documentation string
Janik Zikovsky
committed
* @param documentation :: The string containing the descriptive comment
*/
void Property::setDocumentation( const std::string& documentation )
{
m_documentation = documentation;
}
Russell Taylor
committed
/** Returns the set of valid values for this property, if such a set exists.
* If not, it returns an empty set.
* @return the set of valid values for this property or an empty set
Russell Taylor
committed
*/
std::set<std::string> Property::allowedValues() const
Russell Taylor
committed
{
return std::set<std::string>();
Russell Taylor
committed
}
Russell Taylor
committed
/// Create a PropertyHistory object representing the current state of the Property.
Russell Taylor
committed
const PropertyHistory Property::createHistory() const
{
Roman Tolchenov
committed
return PropertyHistory(this->name(),this->value(),this->type(),this->isDefault(),this->direction());
Russell Taylor
committed
}
Janik Zikovsky
committed
//-------------------------------------------------------------------------------------------------
Janik Zikovsky
committed
/** Return the size of this property.
* Single-Value properties return 1.
* TimeSeriesProperties return the # of entries.
* @return the size of the property
Janik Zikovsky
committed
*/
int Property::size() const
{
return 1;
}
Janik Zikovsky
committed
//-------------------------------------------------------------------------------------------------
/** Returns the units of the property, if any, as a string.
Janik Zikovsky
committed
* Units are optional, and will return empty string if they have
* not been set before.
Janik Zikovsky
committed
*/
std::string Property::units() const
{
return m_units;
}
//-------------------------------------------------------------------------------------------------
/** Sets the units of the property, as a string. This is optional.
Janik Zikovsky
committed
*
Janik Zikovsky
committed
* @param unit :: string to set for the units.
Janik Zikovsky
committed
*/
void Property::setUnits(std::string unit)
{
m_units = std::string(unit); //force the copy constructor
}
Janik Zikovsky
committed
//-------------------------------------------------------------------------------------------------
/** Filter out a property by time. Will be overridden by TimeSeriesProperty (only)
Janik Zikovsky
committed
* @param start :: the beginning time to filter from
* @param stop :: the ending time to filter to
Janik Zikovsky
committed
void Property::filterByTime(const Kernel::DateAndTime start, const Kernel::DateAndTime stop)
{
Gigg, Martyn Anthony
committed
UNUSED_ARG(start);
UNUSED_ARG(stop);
//Do nothing in general
return;
}
Janik Zikovsky
committed
Janik Zikovsky
committed
//-----------------------------------------------------------------------------------------------
/** Split a property by time. Will be overridden by TimeSeriesProperty (only)
* For any other property type, this does nothing.
Janik Zikovsky
committed
* @param splitter :: time splitter
* @param outputs :: holder for splitter output
Janik Zikovsky
committed
void Property::splitByTime(TimeSplitterType& splitter, std::vector< Property * > outputs) const
{
Gigg, Martyn Anthony
committed
UNUSED_ARG(splitter);
UNUSED_ARG(outputs);
Janik Zikovsky
committed
return;
}
} // namespace Kernel
} // namespace Mantid