added AutoPtr,SharedPtr

This commit is contained in:
Peter Schojer
2008-10-07 12:45:07 +00:00
parent 8e78965dfe
commit 6455aafd68

View File

@@ -46,6 +46,8 @@
#include "Poco/Data/AbstractPreparation.h"
#include "Poco/Data/Nullable.h"
#include "Poco/Tuple.h"
#include "Poco/AutoPtr.h"
#include "Poco/SharedPtr.h"
#include <cstddef>
@@ -1801,6 +1803,89 @@ private:
};
template <class T>
class TypeHandler<Poco::AutoPtr<T> >: public AbstractTypeHandler
/// Specialization of type handler for Poco::AutoPtr
{
public:
static void bind(std::size_t pos, const Poco::AutoPtr<T>& obj, AbstractBinder* pBinder, AbstractBinder::Direction dir)
{
// *obj will trigger a nullpointer exception if empty: this is on purpose
TypeHandler<T>::bind(pos, *obj, pBinder, dir);
}
static std::size_t size()
{
return TypeHandler<T>::size();
}
static void extract(std::size_t pos, Poco::AutoPtr<T>& obj, const Poco::AutoPtr<T>& defVal, AbstractExtractor* pExt)
{
poco_assert_dbg (pExt != 0);
if (!obj)
obj = new T();
if (defVal)
TypeHandler<T>::extract(pos, *obj, *defVal, pExt);
else
TypeHandler<T>::extract(pos, *obj, *obj, pExt);
}
static void prepare(std::size_t pos, Poco::AutoPtr<T>& obj, AbstractPreparation* pPrepare)
{
poco_assert_dbg (pPrepare != 0);
if (!obj)
obj = new T();
TypeHandler<T>::prepare(pos, *obj, pPrepare);
}
private:
TypeHandler(const TypeHandler&);
TypeHandler& operator = (const TypeHandler&);
};
template <class T>
class TypeHandler<Poco::SharedPtr<T> >: public AbstractTypeHandler
/// Specialization of type handler for Poco::SharedPtr
{
public:
static void bind(std::size_t pos, const Poco::SharedPtr<T>& obj, AbstractBinder* pBinder, AbstractBinder::Direction dir)
{
// *obj will trigger a nullpointer exception if empty: this is on purpose
TypeHandler<T>::bind(pos, *obj, pBinder, dir);
}
static std::size_t size()
{
return TypeHandler<T>::size();
}
static void extract(std::size_t pos, Poco::SharedPtr<T>& obj, const Poco::SharedPtr<T>& defVal, AbstractExtractor* pExt)
{
poco_assert_dbg (pExt != 0);
if (!obj)
obj = new T();
if (defVal)
TypeHandler<T>::extract(pos, *obj, *defVal, pExt);
else
TypeHandler<T>::extract(pos, *obj, *obj, pExt);
}
static void prepare(std::size_t pos, Poco::SharedPtr<T>& obj, AbstractPreparation* pPrepare)
{
poco_assert_dbg (pPrepare != 0);
if (!obj)
obj = new T();
TypeHandler<T>::prepare(pos, *obj, pPrepare);
}
private:
TypeHandler(const TypeHandler&);
TypeHandler& operator = (const TypeHandler&);
};
} } // namespace Poco::Data