#ifndef ICE_P2_HELPERS_H
#define ICE_P2_HELPERS_H

#include <variableType.h>
#include <p2pvr.h>

template <typename T>
VariableType &
operator>>(VariableType & vt, T & v)
{
	v = vt.as<T>();
	return vt;
}

template <typename T>
VariableType &
operator>>(VariableType & vt, IceUtil::Optional<T> & v)
{
	if (!vt.isNull()) {
		v = NULL;
	}
	else {
		v = vt.as<T>();
	}
	return vt;
}

template <>
VariableType &
operator>>(VariableType & vt, short int & v);

template <typename T>
VariableType &
operator<<(VariableType & vt, const T & v)
{
	vt = v;
	return vt;
}

template <>
VariableType &
operator<<<Common::DateTime>(VariableType & vt, const Common::DateTime & dt);

template <typename T>
VariableType &
operator<<(VariableType & vt, const IceUtil::Optional<T> & v)
{
	if (v) {
		vt << *v;
	}
	else {
		vt = Null();
	}
	return vt;
}


#endif