diff --git a/Data/include/Poco/Data/Nullable.h b/Data/include/Poco/Data/Nullable.h new file mode 100644 index 000000000..fffda299b --- /dev/null +++ b/Data/include/Poco/Data/Nullable.h @@ -0,0 +1,220 @@ +// +// Nullable.h +// +// $Id: //poco/Main/Data/include/Poco/Data/Nullable.h#1 $ +// +// Library: Data +// Package: DataCore +// Module: Nullable +// +// Definition of the Nullable class. +// +// Copyright (c) 2008, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// Permission is hereby granted, free of charge, to any person or organization +// obtaining a copy of the software and accompanying documentation covered by +// this license (the "Software") to use, reproduce, display, distribute, +// execute, and transmit the Software, and to prepare derivative works of the +// Software, and to permit third-parties to whom the Software is furnished to +// do so, all subject to the following: +// +// The copyright notices in the Software and this entire statement, including +// the above license grant, this restriction and the following disclaimer, +// must be included in all copies of the Software, in whole or in part, and +// all derivative works of the Software, unless such copies or derivative +// works are solely in the form of machine-executable object code generated by +// a source language processor. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +// DEALINGS IN THE SOFTWARE. +// + + +#ifndef Data_Nullable_INCLUDED +#define Data_Nullable_INCLUDED + +#include "Poco/Data/AbstractBinder.h" +#include + +//using namespace Poco::Data::Keywords; +//using Poco::Data::NullData; + +namespace Poco { +namespace Data { + +template +class Nullable { + /// Nullable class - template for field, that can be null +public: + Nullable() + : _value(), _isNull(true) + /// Creates the Nullable. + { + } + + Nullable(const T& value) + : _value(value), _isNull(false) + /// Creates the Nullable from value + { + } + + Nullable(const NullData&) + : _value(), _isNull(true) + /// Creates the Nullable from null + { + } + + Nullable& operator=(const T& value) + /// Assigns new value to Nullable + { + _isNull = false; + _value = value; + return *this; + } + + Nullable& operator=(const Nullable& other) + /// Assigns other Nullable to Nullable + { + _isNull = other._isNull; + _value = other._value; + return *this; + } + + Nullable& operator=(const NullData&) + /// Assigns null to Nullable + { + _isNull = true; + return *this; + } + + bool operator==(const Nullable& other) const + /// Compares two Nullable + { + return (_isNull && other._isNull) || (_isNull == other._isNull && _value == other._value); + } + + bool operator==(const T& value) const + /// Compares Nullable with value + { + return (!_isNull && _value == value); + } + + bool operator==(const NullData&) const + /// Compares Nullable with null + { + return _isNull; + } + + bool operator!=(const NullData&) const + /// Compares Nullable for non null + { + return !_isNull; + } + + bool operator!=(const T& value) const + /// Compares Nullable with value for non equal + { + return (_isNull || _value != value); + } + + bool operator < (const Nullable& other) const + /// Compares two Nullable + { + if (_isNull < other._isNull) + return true; + return (_value < other._value); + } + + operator T& () + /// Get referens to value + { + return _value; + } + + operator const T& () const + /// Get const referens to value + { + return _value; + } + + bool isNull() const + /// Test Nullable for null + { + return _isNull; + } + + void setNull(bool isNull) + /// Change Nullable "isNull" sign + { + _isNull = isNull; + } + + const T& getValue() const + /// Get value + { + return _value; + } + + void setValue(const T& value) + /// Set value + { + _isNull = false; _value = value; + } + +private: + + T _value; + bool _isNull; +}; + +// +// operators +// + +template +bool operator == (const T& value, const Nullable& nValue) +{ + return (!nValue.isNull() && value == nValue.getValue()); +} + +template +bool operator != (const T& value, const Nullable& nValue) +{ + return (nValue.isNull() || value != nValue.getValue()); +} + +template +bool operator == (const NullData&, const Nullable& nValue) +{ + return nValue.isNull(); +} + +template +bool operator != (const NullData&, const Nullable& nValue) +{ + return !nValue.isNull(); +} + +template +std::ostream& operator<<(std::ostream& out, const Nullable& obj) +{ + if (obj.isNull()) + { + out << "NULL"; + } + else + { + out << obj.getValue(); + } + return out; +} + +} } // namespace Poco::Data + +#endif // Data_Nullable_INCLUDED diff --git a/Data/include/Poco/Data/TypeHandler.h b/Data/include/Poco/Data/TypeHandler.h index f66ea11ac..26ff95e0a 100644 --- a/Data/include/Poco/Data/TypeHandler.h +++ b/Data/include/Poco/Data/TypeHandler.h @@ -1,1920 +1,1769 @@ -// -// TypeHandler.h -// -// $Id: //poco/Main/Data/include/Poco/Data/TypeHandler.h#12 $ -// -// Library: Data -// Package: DataCore -// Module: TypeHandler -// -// Definition of the TypeHandler class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// Permission is hereby granted, free of charge, to any person or organization -// obtaining a copy of the software and accompanying documentation covered by -// this license (the "Software") to use, reproduce, display, distribute, -// execute, and transmit the Software, and to prepare derivative works of the -// Software, and to permit third-parties to whom the Software is furnished to -// do so, all subject to the following: -// -// The copyright notices in the Software and this entire statement, including -// the above license grant, this restriction and the following disclaimer, -// must be included in all copies of the Software, in whole or in part, and -// all derivative works of the Software, unless such copies or derivative -// works are solely in the form of machine-executable object code generated by -// a source language processor. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT -// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE -// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, -// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. -// - - -#ifndef Data_TypeHandler_INCLUDED -#define Data_TypeHandler_INCLUDED - - -#include "Poco/Data/Data.h" -#include "Poco/Data/AbstractBinder.h" -#include "Poco/Data/AbstractExtractor.h" -#include "Poco/Data/AbstractPreparation.h" -#include "Poco/Tuple.h" -#include - - -namespace Poco { -namespace Data { - - -class AbstractTypeHandler - /// Parent class for type handlers. - /// The reason for this class is to prevent instantiations of type handlers. - /// For documentation on type handlers, see TypeHandler class. -{ -protected: - AbstractTypeHandler(); - ~AbstractTypeHandler(); - AbstractTypeHandler(const AbstractTypeHandler&); - AbstractTypeHandler& operator = (const AbstractTypeHandler&); -}; - - -template -class TypeHandler: public AbstractTypeHandler - /// Converts Rows to a Type and the other way around. Provide template specializations to support your own complex types. - /// - /// Take as example the following (simplified) class: - /// class Person - /// { - /// private: - /// std::string _lastName; - /// std::string _firstName; - /// int _age; - /// [....] // public set/get methods, a default constructor, optional < operator (for set, multiset) or function operator (for map, multimap) - /// }; - /// - /// The TypeHandler must provide a custom bind, size, prepare and extract method: - /// - /// template <> - /// class TypeHandler - /// { - /// public: - /// static std::size_t size() - /// { - /// return 3; // lastName + firstname + age occupy three columns - /// } - /// - /// static void bind(std::size_t pos, const Person& obj, AbstractBinder* pBinder, AbstractBinder::Direction dir) - /// { - /// // the table is defined as Person (LastName VARCHAR(30), FirstName VARCHAR, Age INTEGER(3)) - /// // Note that we advance pos by the number of columns the datatype uses! For string/int this is one. - /// poco_assert_dbg (pBinder != 0); - /// TypeHandler::bind(pos++, obj.getLastName(), pBinder, dir); - /// TypeHandler::bind(pos++, obj.getFirstName(), pBinder, dir); - /// TypeHandler::bind(pos++, obj.getAge(), pBinder); - /// } - /// - /// static void prepare(std::size_t pos, const Person& obj, AbstractPreparation* pPrepare) - /// { - /// // the table is defined as Person (LastName VARCHAR(30), FirstName VARCHAR, Age INTEGER(3)) - /// poco_assert_dbg (pPrepare != 0); - /// TypeHandler::prepare(pos++, obj.getLastName(), pPrepare); - /// TypeHandler::prepare(pos++, obj.getFirstName(), pPrepare); - /// TypeHandler::prepare(pos++, obj.getAge(), pPrepare); - /// } - /// - /// static void extract(std::size_t pos, Person& obj, const Person& defVal, AbstractExtractor* pExt) - /// { - /// // defVal is the default person we should use if we encunter NULL entries, so we take the individual fields - /// // as defaults. You can do more complex checking, ie return defVal if only one single entry of the fields is null etc... - /// poco_assert_dbg (pExt != 0); - /// std::string lastName; - /// std::string firstName; - /// int age = 0; - /// // the table is defined as Person (LastName VARCHAR(30), FirstName VARCHAR, Age INTEGER(3)) - /// TypeHandler::extract(pos++, lastName, defVal.getLastName(), pExt); - /// TypeHandler::extract(pos++, firstName, defVal.getFirstName(), pExt); - /// TypeHandler::extract(pos++, age, defVal.getAge(), pExt); - /// obj.setLastName(lastName); - /// obj.setFirstName(firstName); - /// obj.setAge(age); - /// } - /// }; - /// - /// Note that the TypeHandler template specialization must always be declared in the namespace Poco::Data. - /// Apart from that no further work is needed. One can now use Person with into and use clauses. -{ -public: - static void bind(std::size_t pos, const T& obj, AbstractBinder* pBinder, AbstractBinder::Direction dir) - { - poco_assert_dbg (pBinder != 0); - pBinder->bind(pos, obj, dir); - } - - static std::size_t size() - { - return 1; - } - - static void extract(std::size_t pos, T& obj, const T& defVal, AbstractExtractor* pExt) - { - poco_assert_dbg (pExt != 0); - if (!pExt->extract(pos, obj)) obj = defVal; - } - - static void prepare(std::size_t pos, T& obj, AbstractPreparation* pPrepare) - { - poco_assert_dbg (pPrepare != 0); - pPrepare->prepare(pos, obj); - } - -private: - TypeHandler(const TypeHandler&); - TypeHandler& operator = (const TypeHandler&); -}; - - -template -class TypeHandler >: public AbstractTypeHandler - /// Specialization of type handler for std::deque. -{ -public: - static void bind(std::size_t pos, const std::deque& obj, AbstractBinder* pBinder, AbstractBinder::Direction dir) - { - poco_assert_dbg (pBinder != 0); - pBinder->bind(pos, obj, dir); - } - - static std::size_t size() - { - return 1; - } - - static void extract(std::size_t pos, std::deque& obj, const T& defVal, AbstractExtractor* pExt) - { - poco_assert_dbg (pExt != 0); - if (!pExt->extract(pos, obj)) - obj.assign(obj.size(), defVal); - } - - static void prepare(std::size_t pos, std::deque& obj, AbstractPreparation* pPrepare) - { - poco_assert_dbg (pPrepare != 0); - pPrepare->prepare(pos, obj); - } - -private: - TypeHandler(const TypeHandler&); - TypeHandler& operator = (const TypeHandler&); -}; - - -template -class TypeHandler >: public AbstractTypeHandler - /// Specialization of type handler for std::vector. -{ -public: - static void bind(std::size_t pos, const std::vector& obj, AbstractBinder* pBinder, AbstractBinder::Direction dir) - { - poco_assert_dbg (pBinder != 0); - pBinder->bind(pos, obj, dir); - } - - static std::size_t size() - { - return 1; - } - - static void extract(std::size_t pos, std::vector& obj, const T& defVal, AbstractExtractor* pExt) - { - poco_assert_dbg (pExt != 0); - if (!pExt->extract(pos, obj)) - obj.assign(obj.size(), defVal); - } - - static void prepare(std::size_t pos, std::vector& obj, AbstractPreparation* pPrepare) - { - poco_assert_dbg (pPrepare != 0); - pPrepare->prepare(pos, obj); - } - -private: - TypeHandler(const TypeHandler&); - TypeHandler& operator = (const TypeHandler&); -}; - - -template -class TypeHandler >: public AbstractTypeHandler - /// Specialization of type handler for std::list. -{ -public: - static void bind(std::size_t pos, const std::list& obj, AbstractBinder* pBinder, AbstractBinder::Direction dir) - { - poco_assert_dbg (pBinder != 0); - pBinder->bind(pos, obj, dir); - } - - static std::size_t size() - { - return 1; - } - - static void extract(std::size_t pos, std::list& obj, const T& defVal, AbstractExtractor* pExt) - { - poco_assert_dbg (pExt != 0); - if (!pExt->extract(pos, obj)) - obj.assign(obj.size(), defVal); - } - - static void prepare(std::size_t pos, std::list& obj, AbstractPreparation* pPrepare) - { - poco_assert_dbg (pPrepare != 0); - pPrepare->prepare(pos, obj); - } - -private: - TypeHandler(const TypeHandler&); - TypeHandler& operator = (const TypeHandler&); -}; - - -/// Poco::Tuple TypeHandler specializations - - -template -class TypeHandler > -{ -public: - typedef typename Poco::TypeWrapper >::CONSTREFTYPE TupleConstRef; - typedef typename Poco::TypeWrapper >::REFTYPE TupleRef; - - static void bind(std::size_t pos, TupleConstRef tuple, AbstractBinder* pBinder, AbstractBinder::Direction dir) - { - poco_assert (pBinder != 0); - pBinder->bind(pos++, tuple.template get<0>(), dir); - pBinder->bind(pos++, tuple.template get<1>(), dir); - pBinder->bind(pos++, tuple.template get<2>(), dir); - pBinder->bind(pos++, tuple.template get<3>(), dir); - pBinder->bind(pos++, tuple.template get<4>(), dir); - pBinder->bind(pos++, tuple.template get<5>(), dir); - pBinder->bind(pos++, tuple.template get<6>(), dir); - pBinder->bind(pos++, tuple.template get<7>(), dir); - pBinder->bind(pos++, tuple.template get<8>(), dir); - pBinder->bind(pos++, tuple.template get<9>(), dir); - pBinder->bind(pos++, tuple.template get<10>(), dir); - pBinder->bind(pos++, tuple.template get<11>(), dir); - pBinder->bind(pos++, tuple.template get<12>(), dir); - pBinder->bind(pos++, tuple.template get<13>(), dir); - pBinder->bind(pos++, tuple.template get<14>(), dir); - pBinder->bind(pos++, tuple.template get<15>(), dir); - pBinder->bind(pos++, tuple.template get<16>(), dir); - pBinder->bind(pos++, tuple.template get<17>(), dir); - pBinder->bind(pos++, tuple.template get<18>(), dir); - pBinder->bind(pos++, tuple.template get<19>(), dir); - } - - static void prepare(std::size_t pos, TupleRef tuple, AbstractPreparation* pPrepare) - { - poco_assert (pPrepare != 0); - pPrepare->prepare(pos++, tuple.template get<0>()); - pPrepare->prepare(pos++, tuple.template get<1>()); - pPrepare->prepare(pos++, tuple.template get<2>()); - pPrepare->prepare(pos++, tuple.template get<3>()); - pPrepare->prepare(pos++, tuple.template get<4>()); - pPrepare->prepare(pos++, tuple.template get<5>()); - pPrepare->prepare(pos++, tuple.template get<6>()); - pPrepare->prepare(pos++, tuple.template get<7>()); - pPrepare->prepare(pos++, tuple.template get<8>()); - pPrepare->prepare(pos++, tuple.template get<9>()); - pPrepare->prepare(pos++, tuple.template get<10>()); - pPrepare->prepare(pos++, tuple.template get<11>()); - pPrepare->prepare(pos++, tuple.template get<12>()); - pPrepare->prepare(pos++, tuple.template get<13>()); - pPrepare->prepare(pos++, tuple.template get<14>()); - pPrepare->prepare(pos++, tuple.template get<15>()); - pPrepare->prepare(pos++, tuple.template get<16>()); - pPrepare->prepare(pos++, tuple.template get<17>()); - pPrepare->prepare(pos++, tuple.template get<18>()); - pPrepare->prepare(pos++, tuple.template get<19>()); - } - - static std::size_t size() - { - return Poco::Tuple::length; - } - - static void extract(std::size_t pos, TupleRef tuple, TupleConstRef defVal, AbstractExtractor* pExt) - { - poco_assert (pExt != 0); - if (!pExt->extract(pos++, tuple.template get<0>())) - tuple.template set<0>(defVal.template get<0>()); - if (!pExt->extract(pos++, tuple.template get<1>())) - tuple.template set<1>(defVal.template get<1>()); - if (!pExt->extract(pos++, tuple.template get<2>())) - tuple.template set<2>(defVal.template get<2>()); - if (!pExt->extract(pos++, tuple.template get<3>())) - tuple.template set<3>(defVal.template get<3>()); - if (!pExt->extract(pos++, tuple.template get<4>())) - tuple.template set<4>(defVal.template get<4>()); - if (!pExt->extract(pos++, tuple.template get<5>())) - tuple.template set<5>(defVal.template get<5>()); - if (!pExt->extract(pos++, tuple.template get<6>())) - tuple.template set<6>(defVal.template get<6>()); - if (!pExt->extract(pos++, tuple.template get<7>())) - tuple.template set<7>(defVal.template get<7>()); - if (!pExt->extract(pos++, tuple.template get<8>())) - tuple.template set<8>(defVal.template get<8>()); - if (!pExt->extract(pos++, tuple.template get<9>())) - tuple.template set<9>(defVal.template get<9>()); - if (!pExt->extract(pos++, tuple.template get<10>())) - tuple.template set<10>(defVal.template get<10>()); - if (!pExt->extract(pos++, tuple.template get<11>())) - tuple.template set<11>(defVal.template get<11>()); - if (!pExt->extract(pos++, tuple.template get<12>())) - tuple.template set<12>(defVal.template get<12>()); - if (!pExt->extract(pos++, tuple.template get<13>())) - tuple.template set<13>(defVal.template get<13>()); - if (!pExt->extract(pos++, tuple.template get<14>())) - tuple.template set<14>(defVal.template get<14>()); - if (!pExt->extract(pos++, tuple.template get<15>())) - tuple.template set<15>(defVal.template get<15>()); - if (!pExt->extract(pos++, tuple.template get<16>())) - tuple.template set<16>(defVal.template get<16>()); - if (!pExt->extract(pos++, tuple.template get<17>())) - tuple.template set<17>(defVal.template get<17>()); - if (!pExt->extract(pos++, tuple.template get<18>())) - tuple.template set<18>(defVal.template get<18>()); - if (!pExt->extract(pos++, tuple.template get<19>())) - tuple.template set<19>(defVal.template get<19>()); - } - -private: - TypeHandler(const TypeHandler&); - TypeHandler& operator=(const TypeHandler&); -}; - - -template -class TypeHandler > -{ -public: - typedef typename Poco::TypeWrapper >::CONSTREFTYPE TupleConstRef; - typedef typename Poco::TypeWrapper >::REFTYPE TupleRef; - - static void bind(std::size_t pos, TupleConstRef tuple, AbstractBinder* pBinder, AbstractBinder::Direction dir) - { - poco_assert (pBinder != 0); - pBinder->bind(pos++, tuple.template get<0>(), dir); - pBinder->bind(pos++, tuple.template get<1>(), dir); - pBinder->bind(pos++, tuple.template get<2>(), dir); - pBinder->bind(pos++, tuple.template get<3>(), dir); - pBinder->bind(pos++, tuple.template get<4>(), dir); - pBinder->bind(pos++, tuple.template get<5>(), dir); - pBinder->bind(pos++, tuple.template get<6>(), dir); - pBinder->bind(pos++, tuple.template get<7>(), dir); - pBinder->bind(pos++, tuple.template get<8>(), dir); - pBinder->bind(pos++, tuple.template get<9>(), dir); - pBinder->bind(pos++, tuple.template get<10>(), dir); - pBinder->bind(pos++, tuple.template get<11>(), dir); - pBinder->bind(pos++, tuple.template get<12>(), dir); - pBinder->bind(pos++, tuple.template get<13>(), dir); - pBinder->bind(pos++, tuple.template get<14>(), dir); - pBinder->bind(pos++, tuple.template get<15>(), dir); - pBinder->bind(pos++, tuple.template get<16>(), dir); - pBinder->bind(pos++, tuple.template get<17>(), dir); - pBinder->bind(pos++, tuple.template get<18>(), dir); - } - - static void prepare(std::size_t pos, TupleRef tuple, AbstractPreparation* pPrepare) - { - poco_assert (pPrepare != 0); - pPrepare->prepare(pos++, tuple.template get<0>()); - pPrepare->prepare(pos++, tuple.template get<1>()); - pPrepare->prepare(pos++, tuple.template get<2>()); - pPrepare->prepare(pos++, tuple.template get<3>()); - pPrepare->prepare(pos++, tuple.template get<4>()); - pPrepare->prepare(pos++, tuple.template get<5>()); - pPrepare->prepare(pos++, tuple.template get<6>()); - pPrepare->prepare(pos++, tuple.template get<7>()); - pPrepare->prepare(pos++, tuple.template get<8>()); - pPrepare->prepare(pos++, tuple.template get<9>()); - pPrepare->prepare(pos++, tuple.template get<10>()); - pPrepare->prepare(pos++, tuple.template get<11>()); - pPrepare->prepare(pos++, tuple.template get<12>()); - pPrepare->prepare(pos++, tuple.template get<13>()); - pPrepare->prepare(pos++, tuple.template get<14>()); - pPrepare->prepare(pos++, tuple.template get<15>()); - pPrepare->prepare(pos++, tuple.template get<16>()); - pPrepare->prepare(pos++, tuple.template get<17>()); - pPrepare->prepare(pos++, tuple.template get<18>()); - } - - static std::size_t size() - { - return Poco::Tuple::length; - } - - static void extract(std::size_t pos, TupleRef tuple, TupleConstRef defVal, AbstractExtractor* pExt) - { - poco_assert (pExt != 0); - if (!pExt->extract(pos++, tuple.template get<0>())) - tuple.template set<0>(defVal.template get<0>()); - if (!pExt->extract(pos++, tuple.template get<1>())) - tuple.template set<1>(defVal.template get<1>()); - if (!pExt->extract(pos++, tuple.template get<2>())) - tuple.template set<2>(defVal.template get<2>()); - if (!pExt->extract(pos++, tuple.template get<3>())) - tuple.template set<3>(defVal.template get<3>()); - if (!pExt->extract(pos++, tuple.template get<4>())) - tuple.template set<4>(defVal.template get<4>()); - if (!pExt->extract(pos++, tuple.template get<5>())) - tuple.template set<5>(defVal.template get<5>()); - if (!pExt->extract(pos++, tuple.template get<6>())) - tuple.template set<6>(defVal.template get<6>()); - if (!pExt->extract(pos++, tuple.template get<7>())) - tuple.template set<7>(defVal.template get<7>()); - if (!pExt->extract(pos++, tuple.template get<8>())) - tuple.template set<8>(defVal.template get<8>()); - if (!pExt->extract(pos++, tuple.template get<9>())) - tuple.template set<9>(defVal.template get<9>()); - if (!pExt->extract(pos++, tuple.template get<10>())) - tuple.template set<10>(defVal.template get<10>()); - if (!pExt->extract(pos++, tuple.template get<11>())) - tuple.template set<11>(defVal.template get<11>()); - if (!pExt->extract(pos++, tuple.template get<12>())) - tuple.template set<12>(defVal.template get<12>()); - if (!pExt->extract(pos++, tuple.template get<13>())) - tuple.template set<13>(defVal.template get<13>()); - if (!pExt->extract(pos++, tuple.template get<14>())) - tuple.template set<14>(defVal.template get<14>()); - if (!pExt->extract(pos++, tuple.template get<15>())) - tuple.template set<15>(defVal.template get<15>()); - if (!pExt->extract(pos++, tuple.template get<16>())) - tuple.template set<16>(defVal.template get<16>()); - if (!pExt->extract(pos++, tuple.template get<17>())) - tuple.template set<17>(defVal.template get<17>()); - if (!pExt->extract(pos++, tuple.template get<18>())) - tuple.template set<18>(defVal.template get<18>()); - } - -private: - TypeHandler(const TypeHandler&); - TypeHandler& operator=(const TypeHandler&); -}; - - -template -class TypeHandler > -{ -public: - typedef typename Poco::TypeWrapper >::CONSTREFTYPE TupleConstRef; - typedef typename Poco::TypeWrapper >::REFTYPE TupleRef; - - static void bind(std::size_t pos, TupleConstRef tuple, AbstractBinder* pBinder, AbstractBinder::Direction dir) - { - poco_assert (pBinder != 0); - pBinder->bind(pos++, tuple.template get<0>(), dir); - pBinder->bind(pos++, tuple.template get<1>(), dir); - pBinder->bind(pos++, tuple.template get<2>(), dir); - pBinder->bind(pos++, tuple.template get<3>(), dir); - pBinder->bind(pos++, tuple.template get<4>(), dir); - pBinder->bind(pos++, tuple.template get<5>(), dir); - pBinder->bind(pos++, tuple.template get<6>(), dir); - pBinder->bind(pos++, tuple.template get<7>(), dir); - pBinder->bind(pos++, tuple.template get<8>(), dir); - pBinder->bind(pos++, tuple.template get<9>(), dir); - pBinder->bind(pos++, tuple.template get<10>(), dir); - pBinder->bind(pos++, tuple.template get<11>(), dir); - pBinder->bind(pos++, tuple.template get<12>(), dir); - pBinder->bind(pos++, tuple.template get<13>(), dir); - pBinder->bind(pos++, tuple.template get<14>(), dir); - pBinder->bind(pos++, tuple.template get<15>(), dir); - pBinder->bind(pos++, tuple.template get<16>(), dir); - pBinder->bind(pos++, tuple.template get<17>(), dir); - } - - static void prepare(std::size_t pos, TupleRef tuple, AbstractPreparation* pPrepare) - { - poco_assert (pPrepare != 0); - pPrepare->prepare(pos++, tuple.template get<0>()); - pPrepare->prepare(pos++, tuple.template get<1>()); - pPrepare->prepare(pos++, tuple.template get<2>()); - pPrepare->prepare(pos++, tuple.template get<3>()); - pPrepare->prepare(pos++, tuple.template get<4>()); - pPrepare->prepare(pos++, tuple.template get<5>()); - pPrepare->prepare(pos++, tuple.template get<6>()); - pPrepare->prepare(pos++, tuple.template get<7>()); - pPrepare->prepare(pos++, tuple.template get<8>()); - pPrepare->prepare(pos++, tuple.template get<9>()); - pPrepare->prepare(pos++, tuple.template get<10>()); - pPrepare->prepare(pos++, tuple.template get<11>()); - pPrepare->prepare(pos++, tuple.template get<12>()); - pPrepare->prepare(pos++, tuple.template get<13>()); - pPrepare->prepare(pos++, tuple.template get<14>()); - pPrepare->prepare(pos++, tuple.template get<15>()); - pPrepare->prepare(pos++, tuple.template get<16>()); - pPrepare->prepare(pos++, tuple.template get<17>()); - } - - static std::size_t size() - { - return Poco::Tuple::length; - } - - static void extract(std::size_t pos, TupleRef tuple, TupleConstRef defVal, AbstractExtractor* pExt) - { - poco_assert (pExt != 0); - if (!pExt->extract(pos++, tuple.template get<0>())) - tuple.template set<0>(defVal.template get<0>()); - if (!pExt->extract(pos++, tuple.template get<1>())) - tuple.template set<1>(defVal.template get<1>()); - if (!pExt->extract(pos++, tuple.template get<2>())) - tuple.template set<2>(defVal.template get<2>()); - if (!pExt->extract(pos++, tuple.template get<3>())) - tuple.template set<3>(defVal.template get<3>()); - if (!pExt->extract(pos++, tuple.template get<4>())) - tuple.template set<4>(defVal.template get<4>()); - if (!pExt->extract(pos++, tuple.template get<5>())) - tuple.template set<5>(defVal.template get<5>()); - if (!pExt->extract(pos++, tuple.template get<6>())) - tuple.template set<6>(defVal.template get<6>()); - if (!pExt->extract(pos++, tuple.template get<7>())) - tuple.template set<7>(defVal.template get<7>()); - if (!pExt->extract(pos++, tuple.template get<8>())) - tuple.template set<8>(defVal.template get<8>()); - if (!pExt->extract(pos++, tuple.template get<9>())) - tuple.template set<9>(defVal.template get<9>()); - if (!pExt->extract(pos++, tuple.template get<10>())) - tuple.template set<10>(defVal.template get<10>()); - if (!pExt->extract(pos++, tuple.template get<11>())) - tuple.template set<11>(defVal.template get<11>()); - if (!pExt->extract(pos++, tuple.template get<12>())) - tuple.template set<12>(defVal.template get<12>()); - if (!pExt->extract(pos++, tuple.template get<13>())) - tuple.template set<13>(defVal.template get<13>()); - if (!pExt->extract(pos++, tuple.template get<14>())) - tuple.template set<14>(defVal.template get<14>()); - if (!pExt->extract(pos++, tuple.template get<15>())) - tuple.template set<15>(defVal.template get<15>()); - if (!pExt->extract(pos++, tuple.template get<16>())) - tuple.template set<16>(defVal.template get<16>()); - if (!pExt->extract(pos++, tuple.template get<17>())) - tuple.template set<17>(defVal.template get<17>()); - } - -private: - TypeHandler(const TypeHandler&); - TypeHandler& operator=(const TypeHandler&); -}; - - -template -class TypeHandler > -{ -public: - typedef typename Poco::TypeWrapper >::CONSTREFTYPE TupleConstRef; - typedef typename Poco::TypeWrapper >::REFTYPE TupleRef; - - static void bind(std::size_t pos, TupleConstRef tuple, AbstractBinder* pBinder, AbstractBinder::Direction dir) - { - poco_assert (pBinder != 0); - pBinder->bind(pos++, tuple.template get<0>(), dir); - pBinder->bind(pos++, tuple.template get<1>(), dir); - pBinder->bind(pos++, tuple.template get<2>(), dir); - pBinder->bind(pos++, tuple.template get<3>(), dir); - pBinder->bind(pos++, tuple.template get<4>(), dir); - pBinder->bind(pos++, tuple.template get<5>(), dir); - pBinder->bind(pos++, tuple.template get<6>(), dir); - pBinder->bind(pos++, tuple.template get<7>(), dir); - pBinder->bind(pos++, tuple.template get<8>(), dir); - pBinder->bind(pos++, tuple.template get<9>(), dir); - pBinder->bind(pos++, tuple.template get<10>(), dir); - pBinder->bind(pos++, tuple.template get<11>(), dir); - pBinder->bind(pos++, tuple.template get<12>(), dir); - pBinder->bind(pos++, tuple.template get<13>(), dir); - pBinder->bind(pos++, tuple.template get<14>(), dir); - pBinder->bind(pos++, tuple.template get<15>(), dir); - pBinder->bind(pos++, tuple.template get<16>(), dir); - } - - static void prepare(std::size_t pos, TupleRef tuple, AbstractPreparation* pPrepare) - { - poco_assert (pPrepare != 0); - pPrepare->prepare(pos++, tuple.template get<0>()); - pPrepare->prepare(pos++, tuple.template get<1>()); - pPrepare->prepare(pos++, tuple.template get<2>()); - pPrepare->prepare(pos++, tuple.template get<3>()); - pPrepare->prepare(pos++, tuple.template get<4>()); - pPrepare->prepare(pos++, tuple.template get<5>()); - pPrepare->prepare(pos++, tuple.template get<6>()); - pPrepare->prepare(pos++, tuple.template get<7>()); - pPrepare->prepare(pos++, tuple.template get<8>()); - pPrepare->prepare(pos++, tuple.template get<9>()); - pPrepare->prepare(pos++, tuple.template get<10>()); - pPrepare->prepare(pos++, tuple.template get<11>()); - pPrepare->prepare(pos++, tuple.template get<12>()); - pPrepare->prepare(pos++, tuple.template get<13>()); - pPrepare->prepare(pos++, tuple.template get<14>()); - pPrepare->prepare(pos++, tuple.template get<15>()); - pPrepare->prepare(pos++, tuple.template get<16>()); - } - - static std::size_t size() - { - return Poco::Tuple::length; - } - - static void extract(std::size_t pos, TupleRef tuple, TupleConstRef defVal, AbstractExtractor* pExt) - { - poco_assert (pExt != 0); - if (!pExt->extract(pos++, tuple.template get<0>())) - tuple.template set<0>(defVal.template get<0>()); - if (!pExt->extract(pos++, tuple.template get<1>())) - tuple.template set<1>(defVal.template get<1>()); - if (!pExt->extract(pos++, tuple.template get<2>())) - tuple.template set<2>(defVal.template get<2>()); - if (!pExt->extract(pos++, tuple.template get<3>())) - tuple.template set<3>(defVal.template get<3>()); - if (!pExt->extract(pos++, tuple.template get<4>())) - tuple.template set<4>(defVal.template get<4>()); - if (!pExt->extract(pos++, tuple.template get<5>())) - tuple.template set<5>(defVal.template get<5>()); - if (!pExt->extract(pos++, tuple.template get<6>())) - tuple.template set<6>(defVal.template get<6>()); - if (!pExt->extract(pos++, tuple.template get<7>())) - tuple.template set<7>(defVal.template get<7>()); - if (!pExt->extract(pos++, tuple.template get<8>())) - tuple.template set<8>(defVal.template get<8>()); - if (!pExt->extract(pos++, tuple.template get<9>())) - tuple.template set<9>(defVal.template get<9>()); - if (!pExt->extract(pos++, tuple.template get<10>())) - tuple.template set<10>(defVal.template get<10>()); - if (!pExt->extract(pos++, tuple.template get<11>())) - tuple.template set<11>(defVal.template get<11>()); - if (!pExt->extract(pos++, tuple.template get<12>())) - tuple.template set<12>(defVal.template get<12>()); - if (!pExt->extract(pos++, tuple.template get<13>())) - tuple.template set<13>(defVal.template get<13>()); - if (!pExt->extract(pos++, tuple.template get<14>())) - tuple.template set<14>(defVal.template get<14>()); - if (!pExt->extract(pos++, tuple.template get<15>())) - tuple.template set<15>(defVal.template get<15>()); - if (!pExt->extract(pos++, tuple.template get<16>())) - tuple.template set<16>(defVal.template get<16>()); - } - -private: - TypeHandler(const TypeHandler&); - TypeHandler& operator=(const TypeHandler&); -}; - - -template -class TypeHandler > -{ -public: - typedef typename Poco::TypeWrapper >::CONSTREFTYPE TupleConstRef; - typedef typename Poco::TypeWrapper >::REFTYPE TupleRef; - - static void bind(std::size_t pos, TupleConstRef tuple, AbstractBinder* pBinder, AbstractBinder::Direction dir) - { - poco_assert (pBinder != 0); - pBinder->bind(pos++, tuple.template get<0>(), dir); - pBinder->bind(pos++, tuple.template get<1>(), dir); - pBinder->bind(pos++, tuple.template get<2>(), dir); - pBinder->bind(pos++, tuple.template get<3>(), dir); - pBinder->bind(pos++, tuple.template get<4>(), dir); - pBinder->bind(pos++, tuple.template get<5>(), dir); - pBinder->bind(pos++, tuple.template get<6>(), dir); - pBinder->bind(pos++, tuple.template get<7>(), dir); - pBinder->bind(pos++, tuple.template get<8>(), dir); - pBinder->bind(pos++, tuple.template get<9>(), dir); - pBinder->bind(pos++, tuple.template get<10>(), dir); - pBinder->bind(pos++, tuple.template get<11>(), dir); - pBinder->bind(pos++, tuple.template get<12>(), dir); - pBinder->bind(pos++, tuple.template get<13>(), dir); - pBinder->bind(pos++, tuple.template get<14>(), dir); - pBinder->bind(pos++, tuple.template get<15>(), dir); - } - - static void prepare(std::size_t pos, TupleRef tuple, AbstractPreparation* pPrepare) - { - poco_assert (pPrepare != 0); - pPrepare->prepare(pos++, tuple.template get<0>()); - pPrepare->prepare(pos++, tuple.template get<1>()); - pPrepare->prepare(pos++, tuple.template get<2>()); - pPrepare->prepare(pos++, tuple.template get<3>()); - pPrepare->prepare(pos++, tuple.template get<4>()); - pPrepare->prepare(pos++, tuple.template get<5>()); - pPrepare->prepare(pos++, tuple.template get<6>()); - pPrepare->prepare(pos++, tuple.template get<7>()); - pPrepare->prepare(pos++, tuple.template get<8>()); - pPrepare->prepare(pos++, tuple.template get<9>()); - pPrepare->prepare(pos++, tuple.template get<10>()); - pPrepare->prepare(pos++, tuple.template get<11>()); - pPrepare->prepare(pos++, tuple.template get<12>()); - pPrepare->prepare(pos++, tuple.template get<13>()); - pPrepare->prepare(pos++, tuple.template get<14>()); - pPrepare->prepare(pos++, tuple.template get<15>()); - } - - static std::size_t size() - { - return Poco::Tuple::length; - } - - static void extract(std::size_t pos, TupleRef tuple, TupleConstRef defVal, AbstractExtractor* pExt) - { - poco_assert (pExt != 0); - if (!pExt->extract(pos++, tuple.template get<0>())) - tuple.template set<0>(defVal.template get<0>()); - if (!pExt->extract(pos++, tuple.template get<1>())) - tuple.template set<1>(defVal.template get<1>()); - if (!pExt->extract(pos++, tuple.template get<2>())) - tuple.template set<2>(defVal.template get<2>()); - if (!pExt->extract(pos++, tuple.template get<3>())) - tuple.template set<3>(defVal.template get<3>()); - if (!pExt->extract(pos++, tuple.template get<4>())) - tuple.template set<4>(defVal.template get<4>()); - if (!pExt->extract(pos++, tuple.template get<5>())) - tuple.template set<5>(defVal.template get<5>()); - if (!pExt->extract(pos++, tuple.template get<6>())) - tuple.template set<6>(defVal.template get<6>()); - if (!pExt->extract(pos++, tuple.template get<7>())) - tuple.template set<7>(defVal.template get<7>()); - if (!pExt->extract(pos++, tuple.template get<8>())) - tuple.template set<8>(defVal.template get<8>()); - if (!pExt->extract(pos++, tuple.template get<9>())) - tuple.template set<9>(defVal.template get<9>()); - if (!pExt->extract(pos++, tuple.template get<10>())) - tuple.template set<10>(defVal.template get<10>()); - if (!pExt->extract(pos++, tuple.template get<11>())) - tuple.template set<11>(defVal.template get<11>()); - if (!pExt->extract(pos++, tuple.template get<12>())) - tuple.template set<12>(defVal.template get<12>()); - if (!pExt->extract(pos++, tuple.template get<13>())) - tuple.template set<13>(defVal.template get<13>()); - if (!pExt->extract(pos++, tuple.template get<14>())) - tuple.template set<14>(defVal.template get<14>()); - if (!pExt->extract(pos++, tuple.template get<15>())) - tuple.template set<15>(defVal.template get<15>()); - } - -private: - TypeHandler(const TypeHandler&); - TypeHandler& operator=(const TypeHandler&); -}; - - -template -class TypeHandler > -{ -public: - typedef typename Poco::TypeWrapper >::CONSTREFTYPE TupleConstRef; - typedef typename Poco::TypeWrapper >::REFTYPE TupleRef; - - static void bind(std::size_t pos, TupleConstRef tuple, AbstractBinder* pBinder, AbstractBinder::Direction dir) - { - poco_assert (pBinder != 0); - pBinder->bind(pos++, tuple.template get<0>(), dir); - pBinder->bind(pos++, tuple.template get<1>(), dir); - pBinder->bind(pos++, tuple.template get<2>(), dir); - pBinder->bind(pos++, tuple.template get<3>(), dir); - pBinder->bind(pos++, tuple.template get<4>(), dir); - pBinder->bind(pos++, tuple.template get<5>(), dir); - pBinder->bind(pos++, tuple.template get<6>(), dir); - pBinder->bind(pos++, tuple.template get<7>(), dir); - pBinder->bind(pos++, tuple.template get<8>(), dir); - pBinder->bind(pos++, tuple.template get<9>(), dir); - pBinder->bind(pos++, tuple.template get<10>(), dir); - pBinder->bind(pos++, tuple.template get<11>(), dir); - pBinder->bind(pos++, tuple.template get<12>(), dir); - pBinder->bind(pos++, tuple.template get<13>(), dir); - pBinder->bind(pos++, tuple.template get<14>(), dir); - } - - static void prepare(std::size_t pos, TupleRef tuple, AbstractPreparation* pPrepare) - { - poco_assert (pPrepare != 0); - pPrepare->prepare(pos++, tuple.template get<0>()); - pPrepare->prepare(pos++, tuple.template get<1>()); - pPrepare->prepare(pos++, tuple.template get<2>()); - pPrepare->prepare(pos++, tuple.template get<3>()); - pPrepare->prepare(pos++, tuple.template get<4>()); - pPrepare->prepare(pos++, tuple.template get<5>()); - pPrepare->prepare(pos++, tuple.template get<6>()); - pPrepare->prepare(pos++, tuple.template get<7>()); - pPrepare->prepare(pos++, tuple.template get<8>()); - pPrepare->prepare(pos++, tuple.template get<9>()); - pPrepare->prepare(pos++, tuple.template get<10>()); - pPrepare->prepare(pos++, tuple.template get<11>()); - pPrepare->prepare(pos++, tuple.template get<12>()); - pPrepare->prepare(pos++, tuple.template get<13>()); - pPrepare->prepare(pos++, tuple.template get<14>()); - } - - static std::size_t size() - { - return Poco::Tuple::length; - } - - static void extract(std::size_t pos, TupleRef tuple, TupleConstRef defVal, AbstractExtractor* pExt) - { - poco_assert (pExt != 0); - if (!pExt->extract(pos++, tuple.template get<0>())) - tuple.template set<0>(defVal.template get<0>()); - if (!pExt->extract(pos++, tuple.template get<1>())) - tuple.template set<1>(defVal.template get<1>()); - if (!pExt->extract(pos++, tuple.template get<2>())) - tuple.template set<2>(defVal.template get<2>()); - if (!pExt->extract(pos++, tuple.template get<3>())) - tuple.template set<3>(defVal.template get<3>()); - if (!pExt->extract(pos++, tuple.template get<4>())) - tuple.template set<4>(defVal.template get<4>()); - if (!pExt->extract(pos++, tuple.template get<5>())) - tuple.template set<5>(defVal.template get<5>()); - if (!pExt->extract(pos++, tuple.template get<6>())) - tuple.template set<6>(defVal.template get<6>()); - if (!pExt->extract(pos++, tuple.template get<7>())) - tuple.template set<7>(defVal.template get<7>()); - if (!pExt->extract(pos++, tuple.template get<8>())) - tuple.template set<8>(defVal.template get<8>()); - if (!pExt->extract(pos++, tuple.template get<9>())) - tuple.template set<9>(defVal.template get<9>()); - if (!pExt->extract(pos++, tuple.template get<10>())) - tuple.template set<10>(defVal.template get<10>()); - if (!pExt->extract(pos++, tuple.template get<11>())) - tuple.template set<11>(defVal.template get<11>()); - if (!pExt->extract(pos++, tuple.template get<12>())) - tuple.template set<12>(defVal.template get<12>()); - if (!pExt->extract(pos++, tuple.template get<13>())) - tuple.template set<13>(defVal.template get<13>()); - if (!pExt->extract(pos++, tuple.template get<14>())) - tuple.template set<14>(defVal.template get<14>()); - } - -private: - TypeHandler(const TypeHandler&); - TypeHandler& operator=(const TypeHandler&); -}; - - -template -class TypeHandler > -{ -public: - typedef typename Poco::TypeWrapper >::CONSTREFTYPE TupleConstRef; - typedef typename Poco::TypeWrapper >::REFTYPE TupleRef; - - static void bind(std::size_t pos, TupleConstRef tuple, AbstractBinder* pBinder, AbstractBinder::Direction dir) - { - poco_assert (pBinder != 0); - pBinder->bind(pos++, tuple.template get<0>(), dir); - pBinder->bind(pos++, tuple.template get<1>(), dir); - pBinder->bind(pos++, tuple.template get<2>(), dir); - pBinder->bind(pos++, tuple.template get<3>(), dir); - pBinder->bind(pos++, tuple.template get<4>(), dir); - pBinder->bind(pos++, tuple.template get<5>(), dir); - pBinder->bind(pos++, tuple.template get<6>(), dir); - pBinder->bind(pos++, tuple.template get<7>(), dir); - pBinder->bind(pos++, tuple.template get<8>(), dir); - pBinder->bind(pos++, tuple.template get<9>(), dir); - pBinder->bind(pos++, tuple.template get<10>(), dir); - pBinder->bind(pos++, tuple.template get<11>(), dir); - pBinder->bind(pos++, tuple.template get<12>(), dir); - pBinder->bind(pos++, tuple.template get<13>(), dir); - } - - static void prepare(std::size_t pos, TupleRef tuple, AbstractPreparation* pPrepare) - { - poco_assert (pPrepare != 0); - pPrepare->prepare(pos++, tuple.template get<0>()); - pPrepare->prepare(pos++, tuple.template get<1>()); - pPrepare->prepare(pos++, tuple.template get<2>()); - pPrepare->prepare(pos++, tuple.template get<3>()); - pPrepare->prepare(pos++, tuple.template get<4>()); - pPrepare->prepare(pos++, tuple.template get<5>()); - pPrepare->prepare(pos++, tuple.template get<6>()); - pPrepare->prepare(pos++, tuple.template get<7>()); - pPrepare->prepare(pos++, tuple.template get<8>()); - pPrepare->prepare(pos++, tuple.template get<9>()); - pPrepare->prepare(pos++, tuple.template get<10>()); - pPrepare->prepare(pos++, tuple.template get<11>()); - pPrepare->prepare(pos++, tuple.template get<12>()); - pPrepare->prepare(pos++, tuple.template get<13>()); - } - - static std::size_t size() - { - return Poco::Tuple::length; - } - - static void extract(std::size_t pos, TupleRef tuple, TupleConstRef defVal, AbstractExtractor* pExt) - { - poco_assert (pExt != 0); - if (!pExt->extract(pos++, tuple.template get<0>())) - tuple.template set<0>(defVal.template get<0>()); - if (!pExt->extract(pos++, tuple.template get<1>())) - tuple.template set<1>(defVal.template get<1>()); - if (!pExt->extract(pos++, tuple.template get<2>())) - tuple.template set<2>(defVal.template get<2>()); - if (!pExt->extract(pos++, tuple.template get<3>())) - tuple.template set<3>(defVal.template get<3>()); - if (!pExt->extract(pos++, tuple.template get<4>())) - tuple.template set<4>(defVal.template get<4>()); - if (!pExt->extract(pos++, tuple.template get<5>())) - tuple.template set<5>(defVal.template get<5>()); - if (!pExt->extract(pos++, tuple.template get<6>())) - tuple.template set<6>(defVal.template get<6>()); - if (!pExt->extract(pos++, tuple.template get<7>())) - tuple.template set<7>(defVal.template get<7>()); - if (!pExt->extract(pos++, tuple.template get<8>())) - tuple.template set<8>(defVal.template get<8>()); - if (!pExt->extract(pos++, tuple.template get<9>())) - tuple.template set<9>(defVal.template get<9>()); - if (!pExt->extract(pos++, tuple.template get<10>())) - tuple.template set<10>(defVal.template get<10>()); - if (!pExt->extract(pos++, tuple.template get<11>())) - tuple.template set<11>(defVal.template get<11>()); - if (!pExt->extract(pos++, tuple.template get<12>())) - tuple.template set<12>(defVal.template get<12>()); - if (!pExt->extract(pos++, tuple.template get<13>())) - tuple.template set<13>(defVal.template get<13>()); - } - -private: - TypeHandler(const TypeHandler&); - TypeHandler& operator=(const TypeHandler&); -}; - - -template -class TypeHandler > -{ -public: - typedef typename Poco::TypeWrapper >::CONSTREFTYPE TupleConstRef; - typedef typename Poco::TypeWrapper >::REFTYPE TupleRef; - - static void bind(std::size_t pos, TupleConstRef tuple, AbstractBinder* pBinder, AbstractBinder::Direction dir) - { - poco_assert (pBinder != 0); - pBinder->bind(pos++, tuple.template get<0>(), dir); - pBinder->bind(pos++, tuple.template get<1>(), dir); - pBinder->bind(pos++, tuple.template get<2>(), dir); - pBinder->bind(pos++, tuple.template get<3>(), dir); - pBinder->bind(pos++, tuple.template get<4>(), dir); - pBinder->bind(pos++, tuple.template get<5>(), dir); - pBinder->bind(pos++, tuple.template get<6>(), dir); - pBinder->bind(pos++, tuple.template get<7>(), dir); - pBinder->bind(pos++, tuple.template get<8>(), dir); - pBinder->bind(pos++, tuple.template get<9>(), dir); - pBinder->bind(pos++, tuple.template get<10>(), dir); - pBinder->bind(pos++, tuple.template get<11>(), dir); - pBinder->bind(pos++, tuple.template get<12>(), dir); - } - - static void prepare(std::size_t pos, TupleRef tuple, AbstractPreparation* pPrepare) - { - poco_assert (pPrepare != 0); - pPrepare->prepare(pos++, tuple.template get<0>()); - pPrepare->prepare(pos++, tuple.template get<1>()); - pPrepare->prepare(pos++, tuple.template get<2>()); - pPrepare->prepare(pos++, tuple.template get<3>()); - pPrepare->prepare(pos++, tuple.template get<4>()); - pPrepare->prepare(pos++, tuple.template get<5>()); - pPrepare->prepare(pos++, tuple.template get<6>()); - pPrepare->prepare(pos++, tuple.template get<7>()); - pPrepare->prepare(pos++, tuple.template get<8>()); - pPrepare->prepare(pos++, tuple.template get<9>()); - pPrepare->prepare(pos++, tuple.template get<10>()); - pPrepare->prepare(pos++, tuple.template get<11>()); - pPrepare->prepare(pos++, tuple.template get<12>()); - } - - static std::size_t size() - { - return Poco::Tuple::length; - } - - static void extract(std::size_t pos, TupleRef tuple, TupleConstRef defVal, AbstractExtractor* pExt) - { - poco_assert (pExt != 0); - if (!pExt->extract(pos++, tuple.template get<0>())) - tuple.template set<0>(defVal.template get<0>()); - if (!pExt->extract(pos++, tuple.template get<1>())) - tuple.template set<1>(defVal.template get<1>()); - if (!pExt->extract(pos++, tuple.template get<2>())) - tuple.template set<2>(defVal.template get<2>()); - if (!pExt->extract(pos++, tuple.template get<3>())) - tuple.template set<3>(defVal.template get<3>()); - if (!pExt->extract(pos++, tuple.template get<4>())) - tuple.template set<4>(defVal.template get<4>()); - if (!pExt->extract(pos++, tuple.template get<5>())) - tuple.template set<5>(defVal.template get<5>()); - if (!pExt->extract(pos++, tuple.template get<6>())) - tuple.template set<6>(defVal.template get<6>()); - if (!pExt->extract(pos++, tuple.template get<7>())) - tuple.template set<7>(defVal.template get<7>()); - if (!pExt->extract(pos++, tuple.template get<8>())) - tuple.template set<8>(defVal.template get<8>()); - if (!pExt->extract(pos++, tuple.template get<9>())) - tuple.template set<9>(defVal.template get<9>()); - if (!pExt->extract(pos++, tuple.template get<10>())) - tuple.template set<10>(defVal.template get<10>()); - if (!pExt->extract(pos++, tuple.template get<11>())) - tuple.template set<11>(defVal.template get<11>()); - if (!pExt->extract(pos++, tuple.template get<12>())) - tuple.template set<12>(defVal.template get<12>()); - } - -private: - TypeHandler(const TypeHandler&); - TypeHandler& operator=(const TypeHandler&); -}; - - -template -class TypeHandler > -{ -public: - typedef typename Poco::TypeWrapper >::CONSTREFTYPE TupleConstRef; - typedef typename Poco::TypeWrapper >::REFTYPE TupleRef; - - static void bind(std::size_t pos, TupleConstRef tuple, AbstractBinder* pBinder, AbstractBinder::Direction dir) - { - poco_assert (pBinder != 0); - pBinder->bind(pos++, tuple.template get<0>(), dir); - pBinder->bind(pos++, tuple.template get<1>(), dir); - pBinder->bind(pos++, tuple.template get<2>(), dir); - pBinder->bind(pos++, tuple.template get<3>(), dir); - pBinder->bind(pos++, tuple.template get<4>(), dir); - pBinder->bind(pos++, tuple.template get<5>(), dir); - pBinder->bind(pos++, tuple.template get<6>(), dir); - pBinder->bind(pos++, tuple.template get<7>(), dir); - pBinder->bind(pos++, tuple.template get<8>(), dir); - pBinder->bind(pos++, tuple.template get<9>(), dir); - pBinder->bind(pos++, tuple.template get<10>(), dir); - pBinder->bind(pos++, tuple.template get<11>(), dir); - } - - static void prepare(std::size_t pos, TupleRef tuple, AbstractPreparation* pPrepare) - { - poco_assert (pPrepare != 0); - pPrepare->prepare(pos++, tuple.template get<0>()); - pPrepare->prepare(pos++, tuple.template get<1>()); - pPrepare->prepare(pos++, tuple.template get<2>()); - pPrepare->prepare(pos++, tuple.template get<3>()); - pPrepare->prepare(pos++, tuple.template get<4>()); - pPrepare->prepare(pos++, tuple.template get<5>()); - pPrepare->prepare(pos++, tuple.template get<6>()); - pPrepare->prepare(pos++, tuple.template get<7>()); - pPrepare->prepare(pos++, tuple.template get<8>()); - pPrepare->prepare(pos++, tuple.template get<9>()); - pPrepare->prepare(pos++, tuple.template get<10>()); - pPrepare->prepare(pos++, tuple.template get<11>()); - } - - static std::size_t size() - { - return Poco::Tuple::length; - } - - static void extract(std::size_t pos, TupleRef tuple, TupleConstRef defVal, AbstractExtractor* pExt) - { - poco_assert (pExt != 0); - if (!pExt->extract(pos++, tuple.template get<0>())) - tuple.template set<0>(defVal.template get<0>()); - if (!pExt->extract(pos++, tuple.template get<1>())) - tuple.template set<1>(defVal.template get<1>()); - if (!pExt->extract(pos++, tuple.template get<2>())) - tuple.template set<2>(defVal.template get<2>()); - if (!pExt->extract(pos++, tuple.template get<3>())) - tuple.template set<3>(defVal.template get<3>()); - if (!pExt->extract(pos++, tuple.template get<4>())) - tuple.template set<4>(defVal.template get<4>()); - if (!pExt->extract(pos++, tuple.template get<5>())) - tuple.template set<5>(defVal.template get<5>()); - if (!pExt->extract(pos++, tuple.template get<6>())) - tuple.template set<6>(defVal.template get<6>()); - if (!pExt->extract(pos++, tuple.template get<7>())) - tuple.template set<7>(defVal.template get<7>()); - if (!pExt->extract(pos++, tuple.template get<8>())) - tuple.template set<8>(defVal.template get<8>()); - if (!pExt->extract(pos++, tuple.template get<9>())) - tuple.template set<9>(defVal.template get<9>()); - if (!pExt->extract(pos++, tuple.template get<10>())) - tuple.template set<10>(defVal.template get<10>()); - if (!pExt->extract(pos++, tuple.template get<11>())) - tuple.template set<11>(defVal.template get<11>()); - } - -private: - TypeHandler(const TypeHandler&); - TypeHandler& operator=(const TypeHandler&); -}; - - -template -class TypeHandler > -{ -public: - typedef typename Poco::TypeWrapper >::CONSTREFTYPE TupleConstRef; - typedef typename Poco::TypeWrapper >::REFTYPE TupleRef; - - static void bind(std::size_t pos, TupleConstRef tuple, AbstractBinder* pBinder, AbstractBinder::Direction dir) - { - poco_assert (pBinder != 0); - pBinder->bind(pos++, tuple.template get<0>(), dir); - pBinder->bind(pos++, tuple.template get<1>(), dir); - pBinder->bind(pos++, tuple.template get<2>(), dir); - pBinder->bind(pos++, tuple.template get<3>(), dir); - pBinder->bind(pos++, tuple.template get<4>(), dir); - pBinder->bind(pos++, tuple.template get<5>(), dir); - pBinder->bind(pos++, tuple.template get<6>(), dir); - pBinder->bind(pos++, tuple.template get<7>(), dir); - pBinder->bind(pos++, tuple.template get<8>(), dir); - pBinder->bind(pos++, tuple.template get<9>(), dir); - pBinder->bind(pos++, tuple.template get<10>(), dir); - } - - static void prepare(std::size_t pos, TupleRef tuple, AbstractPreparation* pPrepare) - { - poco_assert (pPrepare != 0); - pPrepare->prepare(pos++, tuple.template get<0>()); - pPrepare->prepare(pos++, tuple.template get<1>()); - pPrepare->prepare(pos++, tuple.template get<2>()); - pPrepare->prepare(pos++, tuple.template get<3>()); - pPrepare->prepare(pos++, tuple.template get<4>()); - pPrepare->prepare(pos++, tuple.template get<5>()); - pPrepare->prepare(pos++, tuple.template get<6>()); - pPrepare->prepare(pos++, tuple.template get<7>()); - pPrepare->prepare(pos++, tuple.template get<8>()); - pPrepare->prepare(pos++, tuple.template get<9>()); - pPrepare->prepare(pos++, tuple.template get<10>()); - } - - static std::size_t size() - { - return Poco::Tuple::length; - } - - static void extract(std::size_t pos, TupleRef tuple, TupleConstRef defVal, AbstractExtractor* pExt) - { - poco_assert (pExt != 0); - if (!pExt->extract(pos++, tuple.template get<0>())) - tuple.template set<0>(defVal.template get<0>()); - if (!pExt->extract(pos++, tuple.template get<1>())) - tuple.template set<1>(defVal.template get<1>()); - if (!pExt->extract(pos++, tuple.template get<2>())) - tuple.template set<2>(defVal.template get<2>()); - if (!pExt->extract(pos++, tuple.template get<3>())) - tuple.template set<3>(defVal.template get<3>()); - if (!pExt->extract(pos++, tuple.template get<4>())) - tuple.template set<4>(defVal.template get<4>()); - if (!pExt->extract(pos++, tuple.template get<5>())) - tuple.template set<5>(defVal.template get<5>()); - if (!pExt->extract(pos++, tuple.template get<6>())) - tuple.template set<6>(defVal.template get<6>()); - if (!pExt->extract(pos++, tuple.template get<7>())) - tuple.template set<7>(defVal.template get<7>()); - if (!pExt->extract(pos++, tuple.template get<8>())) - tuple.template set<8>(defVal.template get<8>()); - if (!pExt->extract(pos++, tuple.template get<9>())) - tuple.template set<9>(defVal.template get<9>()); - if (!pExt->extract(pos++, tuple.template get<10>())) - tuple.template set<10>(defVal.template get<10>()); - } - -private: - TypeHandler(const TypeHandler&); - TypeHandler& operator=(const TypeHandler&); -}; - - -template -class TypeHandler > -{ -public: - typedef typename Poco::TypeWrapper >::CONSTREFTYPE TupleConstRef; - typedef typename Poco::TypeWrapper >::REFTYPE TupleRef; - - static void bind(std::size_t pos, TupleConstRef tuple, AbstractBinder* pBinder, AbstractBinder::Direction dir) - { - poco_assert (pBinder != 0); - pBinder->bind(pos++, tuple.template get<0>(), dir); - pBinder->bind(pos++, tuple.template get<1>(), dir); - pBinder->bind(pos++, tuple.template get<2>(), dir); - pBinder->bind(pos++, tuple.template get<3>(), dir); - pBinder->bind(pos++, tuple.template get<4>(), dir); - pBinder->bind(pos++, tuple.template get<5>(), dir); - pBinder->bind(pos++, tuple.template get<6>(), dir); - pBinder->bind(pos++, tuple.template get<7>(), dir); - pBinder->bind(pos++, tuple.template get<8>(), dir); - pBinder->bind(pos++, tuple.template get<9>(), dir); - } - - static void prepare(std::size_t pos, TupleRef tuple, AbstractPreparation* pPrepare) - { - poco_assert (pPrepare != 0); - pPrepare->prepare(pos++, tuple.template get<0>()); - pPrepare->prepare(pos++, tuple.template get<1>()); - pPrepare->prepare(pos++, tuple.template get<2>()); - pPrepare->prepare(pos++, tuple.template get<3>()); - pPrepare->prepare(pos++, tuple.template get<4>()); - pPrepare->prepare(pos++, tuple.template get<5>()); - pPrepare->prepare(pos++, tuple.template get<6>()); - pPrepare->prepare(pos++, tuple.template get<7>()); - pPrepare->prepare(pos++, tuple.template get<8>()); - pPrepare->prepare(pos++, tuple.template get<9>()); - } - - static std::size_t size() - { - return Poco::Tuple::length; - } - - static void extract(std::size_t pos, TupleRef tuple, TupleConstRef defVal, AbstractExtractor* pExt) - { - poco_assert (pExt != 0); - if (!pExt->extract(pos++, tuple.template get<0>())) - tuple.template set<0>(defVal.template get<0>()); - if (!pExt->extract(pos++, tuple.template get<1>())) - tuple.template set<1>(defVal.template get<1>()); - if (!pExt->extract(pos++, tuple.template get<2>())) - tuple.template set<2>(defVal.template get<2>()); - if (!pExt->extract(pos++, tuple.template get<3>())) - tuple.template set<3>(defVal.template get<3>()); - if (!pExt->extract(pos++, tuple.template get<4>())) - tuple.template set<4>(defVal.template get<4>()); - if (!pExt->extract(pos++, tuple.template get<5>())) - tuple.template set<5>(defVal.template get<5>()); - if (!pExt->extract(pos++, tuple.template get<6>())) - tuple.template set<6>(defVal.template get<6>()); - if (!pExt->extract(pos++, tuple.template get<7>())) - tuple.template set<7>(defVal.template get<7>()); - if (!pExt->extract(pos++, tuple.template get<8>())) - tuple.template set<8>(defVal.template get<8>()); - if (!pExt->extract(pos++, tuple.template get<9>())) - tuple.template set<9>(defVal.template get<9>()); - } - -private: - TypeHandler(const TypeHandler&); - TypeHandler& operator=(const TypeHandler&); -}; - - -template -class TypeHandler > -{ -public: - typedef typename Poco::TypeWrapper >::CONSTREFTYPE TupleConstRef; - typedef typename Poco::TypeWrapper >::REFTYPE TupleRef; - - static void bind(std::size_t pos, TupleConstRef tuple, AbstractBinder* pBinder, AbstractBinder::Direction dir) - { - poco_assert (pBinder != 0); - pBinder->bind(pos++, tuple.template get<0>(), dir); - pBinder->bind(pos++, tuple.template get<1>(), dir); - pBinder->bind(pos++, tuple.template get<2>(), dir); - pBinder->bind(pos++, tuple.template get<3>(), dir); - pBinder->bind(pos++, tuple.template get<4>(), dir); - pBinder->bind(pos++, tuple.template get<5>(), dir); - pBinder->bind(pos++, tuple.template get<6>(), dir); - pBinder->bind(pos++, tuple.template get<7>(), dir); - pBinder->bind(pos++, tuple.template get<8>(), dir); - } - - static void prepare(std::size_t pos, TupleRef tuple, AbstractPreparation* pPrepare) - { - poco_assert (pPrepare != 0); - pPrepare->prepare(pos++, tuple.template get<0>()); - pPrepare->prepare(pos++, tuple.template get<1>()); - pPrepare->prepare(pos++, tuple.template get<2>()); - pPrepare->prepare(pos++, tuple.template get<3>()); - pPrepare->prepare(pos++, tuple.template get<4>()); - pPrepare->prepare(pos++, tuple.template get<5>()); - pPrepare->prepare(pos++, tuple.template get<6>()); - pPrepare->prepare(pos++, tuple.template get<7>()); - pPrepare->prepare(pos++, tuple.template get<8>()); - } - - static std::size_t size() - { - return Poco::Tuple::length; - } - - static void extract(std::size_t pos, TupleRef tuple, TupleConstRef defVal, AbstractExtractor* pExt) - { - poco_assert (pExt != 0); - if (!pExt->extract(pos++, tuple.template get<0>())) - tuple.template set<0>(defVal.template get<0>()); - if (!pExt->extract(pos++, tuple.template get<1>())) - tuple.template set<1>(defVal.template get<1>()); - if (!pExt->extract(pos++, tuple.template get<2>())) - tuple.template set<2>(defVal.template get<2>()); - if (!pExt->extract(pos++, tuple.template get<3>())) - tuple.template set<3>(defVal.template get<3>()); - if (!pExt->extract(pos++, tuple.template get<4>())) - tuple.template set<4>(defVal.template get<4>()); - if (!pExt->extract(pos++, tuple.template get<5>())) - tuple.template set<5>(defVal.template get<5>()); - if (!pExt->extract(pos++, tuple.template get<6>())) - tuple.template set<6>(defVal.template get<6>()); - if (!pExt->extract(pos++, tuple.template get<7>())) - tuple.template set<7>(defVal.template get<7>()); - if (!pExt->extract(pos++, tuple.template get<8>())) - tuple.template set<8>(defVal.template get<8>()); - } - -private: - TypeHandler(const TypeHandler&); - TypeHandler& operator=(const TypeHandler&); -}; - - -template -class TypeHandler > -{ -public: - typedef typename Poco::TypeWrapper >::CONSTREFTYPE TupleConstRef; - typedef typename Poco::TypeWrapper >::REFTYPE TupleRef; - - static void bind(std::size_t pos, TupleConstRef tuple, AbstractBinder* pBinder, AbstractBinder::Direction dir) - { - poco_assert (pBinder != 0); - pBinder->bind(pos++, tuple.template get<0>(), dir); - pBinder->bind(pos++, tuple.template get<1>(), dir); - pBinder->bind(pos++, tuple.template get<2>(), dir); - pBinder->bind(pos++, tuple.template get<3>(), dir); - pBinder->bind(pos++, tuple.template get<4>(), dir); - pBinder->bind(pos++, tuple.template get<5>(), dir); - pBinder->bind(pos++, tuple.template get<6>(), dir); - pBinder->bind(pos++, tuple.template get<7>(), dir); - } - - static void prepare(std::size_t pos, TupleRef tuple, AbstractPreparation* pPrepare) - { - poco_assert (pPrepare != 0); - pPrepare->prepare(pos++, tuple.template get<0>()); - pPrepare->prepare(pos++, tuple.template get<1>()); - pPrepare->prepare(pos++, tuple.template get<2>()); - pPrepare->prepare(pos++, tuple.template get<3>()); - pPrepare->prepare(pos++, tuple.template get<4>()); - pPrepare->prepare(pos++, tuple.template get<5>()); - pPrepare->prepare(pos++, tuple.template get<6>()); - pPrepare->prepare(pos++, tuple.template get<7>()); - } - - static std::size_t size() - { - return Poco::Tuple::length; - } - - static void extract(std::size_t pos, TupleRef tuple, TupleConstRef defVal, AbstractExtractor* pExt) - { - poco_assert (pExt != 0); - if (!pExt->extract(pos++, tuple.template get<0>())) - tuple.template set<0>(defVal.template get<0>()); - if (!pExt->extract(pos++, tuple.template get<1>())) - tuple.template set<1>(defVal.template get<1>()); - if (!pExt->extract(pos++, tuple.template get<2>())) - tuple.template set<2>(defVal.template get<2>()); - if (!pExt->extract(pos++, tuple.template get<3>())) - tuple.template set<3>(defVal.template get<3>()); - if (!pExt->extract(pos++, tuple.template get<4>())) - tuple.template set<4>(defVal.template get<4>()); - if (!pExt->extract(pos++, tuple.template get<5>())) - tuple.template set<5>(defVal.template get<5>()); - if (!pExt->extract(pos++, tuple.template get<6>())) - tuple.template set<6>(defVal.template get<6>()); - if (!pExt->extract(pos++, tuple.template get<7>())) - tuple.template set<7>(defVal.template get<7>()); - } - -private: - TypeHandler(const TypeHandler&); - TypeHandler& operator=(const TypeHandler&); -}; - - -template -class TypeHandler > -{ -public: - typedef typename Poco::TypeWrapper >::CONSTREFTYPE TupleConstRef; - typedef typename Poco::TypeWrapper >::REFTYPE TupleRef; - - static void bind(std::size_t pos, TupleConstRef tuple, AbstractBinder* pBinder, AbstractBinder::Direction dir) - { - poco_assert (pBinder != 0); - pBinder->bind(pos++, tuple.template get<0>(), dir); - pBinder->bind(pos++, tuple.template get<1>(), dir); - pBinder->bind(pos++, tuple.template get<2>(), dir); - pBinder->bind(pos++, tuple.template get<3>(), dir); - pBinder->bind(pos++, tuple.template get<4>(), dir); - pBinder->bind(pos++, tuple.template get<5>(), dir); - pBinder->bind(pos++, tuple.template get<6>(), dir); - } - - static void prepare(std::size_t pos, TupleRef tuple, AbstractPreparation* pPrepare) - { - poco_assert (pPrepare != 0); - pPrepare->prepare(pos++, tuple.template get<0>()); - pPrepare->prepare(pos++, tuple.template get<1>()); - pPrepare->prepare(pos++, tuple.template get<2>()); - pPrepare->prepare(pos++, tuple.template get<3>()); - pPrepare->prepare(pos++, tuple.template get<4>()); - pPrepare->prepare(pos++, tuple.template get<5>()); - pPrepare->prepare(pos++, tuple.template get<6>()); - } - - static std::size_t size() - { - return Poco::Tuple::length; - } - - static void extract(std::size_t pos, TupleRef tuple, TupleConstRef defVal, AbstractExtractor* pExt) - { - poco_assert (pExt != 0); - if (!pExt->extract(pos++, tuple.template get<0>())) - tuple.template set<0>(defVal.template get<0>()); - if (!pExt->extract(pos++, tuple.template get<1>())) - tuple.template set<1>(defVal.template get<1>()); - if (!pExt->extract(pos++, tuple.template get<2>())) - tuple.template set<2>(defVal.template get<2>()); - if (!pExt->extract(pos++, tuple.template get<3>())) - tuple.template set<3>(defVal.template get<3>()); - if (!pExt->extract(pos++, tuple.template get<4>())) - tuple.template set<4>(defVal.template get<4>()); - if (!pExt->extract(pos++, tuple.template get<5>())) - tuple.template set<5>(defVal.template get<5>()); - if (!pExt->extract(pos++, tuple.template get<6>())) - tuple.template set<6>(defVal.template get<6>()); - } - -private: - TypeHandler(const TypeHandler&); - TypeHandler& operator=(const TypeHandler&); -}; - - -template -class TypeHandler > -{ -public: - typedef typename Poco::TypeWrapper >::CONSTREFTYPE TupleConstRef; - typedef typename Poco::TypeWrapper >::REFTYPE TupleRef; - - static void bind(std::size_t pos, TupleConstRef tuple, AbstractBinder* pBinder, AbstractBinder::Direction dir) - { - poco_assert (pBinder != 0); - pBinder->bind(pos++, tuple.template get<0>(), dir); - pBinder->bind(pos++, tuple.template get<1>(), dir); - pBinder->bind(pos++, tuple.template get<2>(), dir); - pBinder->bind(pos++, tuple.template get<3>(), dir); - pBinder->bind(pos++, tuple.template get<4>(), dir); - pBinder->bind(pos++, tuple.template get<5>(), dir); - } - - static void prepare(std::size_t pos, TupleRef tuple, AbstractPreparation* pPrepare) - { - poco_assert (pPrepare != 0); - pPrepare->prepare(pos++, tuple.template get<0>()); - pPrepare->prepare(pos++, tuple.template get<1>()); - pPrepare->prepare(pos++, tuple.template get<2>()); - pPrepare->prepare(pos++, tuple.template get<3>()); - pPrepare->prepare(pos++, tuple.template get<4>()); - pPrepare->prepare(pos++, tuple.template get<5>()); - } - - static std::size_t size() - { - return Poco::Tuple::length; - } - - static void extract(std::size_t pos, TupleRef tuple, TupleConstRef defVal, AbstractExtractor* pExt) - { - poco_assert (pExt != 0); - if (!pExt->extract(pos++, tuple.template get<0>())) - tuple.template set<0>(defVal.template get<0>()); - if (!pExt->extract(pos++, tuple.template get<1>())) - tuple.template set<1>(defVal.template get<1>()); - if (!pExt->extract(pos++, tuple.template get<2>())) - tuple.template set<2>(defVal.template get<2>()); - if (!pExt->extract(pos++, tuple.template get<3>())) - tuple.template set<3>(defVal.template get<3>()); - if (!pExt->extract(pos++, tuple.template get<4>())) - tuple.template set<4>(defVal.template get<4>()); - if (!pExt->extract(pos++, tuple.template get<5>())) - tuple.template set<5>(defVal.template get<5>()); - } - -private: - TypeHandler(const TypeHandler&); - TypeHandler& operator=(const TypeHandler&); -}; - - -template -class TypeHandler > -{ -public: - typedef typename Poco::TypeWrapper >::CONSTREFTYPE TupleConstRef; - typedef typename Poco::TypeWrapper >::REFTYPE TupleRef; - - static void bind(std::size_t pos, TupleConstRef tuple, AbstractBinder* pBinder, AbstractBinder::Direction dir) - { - poco_assert (pBinder != 0); - pBinder->bind(pos++, tuple.template get<0>(), dir); - pBinder->bind(pos++, tuple.template get<1>(), dir); - pBinder->bind(pos++, tuple.template get<2>(), dir); - pBinder->bind(pos++, tuple.template get<3>(), dir); - pBinder->bind(pos++, tuple.template get<4>(), dir); - } - - static void prepare(std::size_t pos, TupleRef tuple, AbstractPreparation* pPrepare) - { - poco_assert (pPrepare != 0); - pPrepare->prepare(pos++, tuple.template get<0>()); - pPrepare->prepare(pos++, tuple.template get<1>()); - pPrepare->prepare(pos++, tuple.template get<2>()); - pPrepare->prepare(pos++, tuple.template get<3>()); - pPrepare->prepare(pos++, tuple.template get<4>()); - } - - static std::size_t size() - { - return Poco::Tuple::length; - } - - static void extract(std::size_t pos, TupleRef tuple, TupleConstRef defVal, AbstractExtractor* pExt) - { - poco_assert (pExt != 0); - if (!pExt->extract(pos++, tuple.template get<0>())) - tuple.template set<0>(defVal.template get<0>()); - if (!pExt->extract(pos++, tuple.template get<1>())) - tuple.template set<1>(defVal.template get<1>()); - if (!pExt->extract(pos++, tuple.template get<2>())) - tuple.template set<2>(defVal.template get<2>()); - if (!pExt->extract(pos++, tuple.template get<3>())) - tuple.template set<3>(defVal.template get<3>()); - if (!pExt->extract(pos++, tuple.template get<4>())) - tuple.template set<4>(defVal.template get<4>()); - } - -private: - TypeHandler(const TypeHandler&); - TypeHandler& operator=(const TypeHandler&); -}; - - -template -class TypeHandler > -{ -public: - typedef typename Poco::TypeWrapper >::CONSTREFTYPE TupleConstRef; - typedef typename Poco::TypeWrapper >::REFTYPE TupleRef; - - static void bind(std::size_t pos, TupleConstRef tuple, AbstractBinder* pBinder, AbstractBinder::Direction dir) - { - poco_assert (pBinder != 0); - pBinder->bind(pos++, tuple.template get<0>(), dir); - pBinder->bind(pos++, tuple.template get<1>(), dir); - pBinder->bind(pos++, tuple.template get<2>(), dir); - pBinder->bind(pos++, tuple.template get<3>(), dir); - } - - static void prepare(std::size_t pos, TupleRef tuple, AbstractPreparation* pPrepare) - { - poco_assert (pPrepare != 0); - pPrepare->prepare(pos++, tuple.template get<0>()); - pPrepare->prepare(pos++, tuple.template get<1>()); - pPrepare->prepare(pos++, tuple.template get<2>()); - pPrepare->prepare(pos++, tuple.template get<3>()); - } - - static std::size_t size() - { - return Poco::Tuple::length; - } - - static void extract(std::size_t pos, TupleRef tuple, TupleConstRef defVal, AbstractExtractor* pExt) - { - poco_assert (pExt != 0); - if (!pExt->extract(pos++, tuple.template get<0>())) - tuple.template set<0>(defVal.template get<0>()); - if (!pExt->extract(pos++, tuple.template get<1>())) - tuple.template set<1>(defVal.template get<1>()); - if (!pExt->extract(pos++, tuple.template get<2>())) - tuple.template set<2>(defVal.template get<2>()); - if (!pExt->extract(pos++, tuple.template get<3>())) - tuple.template set<3>(defVal.template get<3>()); - } - -private: - TypeHandler(const TypeHandler&); - TypeHandler& operator=(const TypeHandler&); -}; - - -template -class TypeHandler > -{ -public: - typedef typename Poco::TypeWrapper >::CONSTREFTYPE TupleConstRef; - typedef typename Poco::TypeWrapper >::REFTYPE TupleRef; - - static void bind(std::size_t pos, TupleConstRef tuple, AbstractBinder* pBinder, AbstractBinder::Direction dir) - { - poco_assert (pBinder != 0); - pBinder->bind(pos++, tuple.template get<0>(), dir); - pBinder->bind(pos++, tuple.template get<1>(), dir); - pBinder->bind(pos++, tuple.template get<2>(), dir); - } - - static void prepare(std::size_t pos, TupleRef tuple, AbstractPreparation* pPrepare) - { - poco_assert (pPrepare != 0); - pPrepare->prepare(pos++, tuple.template get<0>()); - pPrepare->prepare(pos++, tuple.template get<1>()); - pPrepare->prepare(pos++, tuple.template get<2>()); - } - - static std::size_t size() - { - return Poco::Tuple::length; - } - - static void extract(std::size_t pos, TupleRef tuple, TupleConstRef defVal, AbstractExtractor* pExt) - { - poco_assert (pExt != 0); - if (!pExt->extract(pos++, tuple.template get<0>())) - tuple.template set<0>(defVal.template get<0>()); - if (!pExt->extract(pos++, tuple.template get<1>())) - tuple.template set<1>(defVal.template get<1>()); - if (!pExt->extract(pos++, tuple.template get<2>())) - tuple.template set<2>(defVal.template get<2>()); - } - -private: - TypeHandler(const TypeHandler&); - TypeHandler& operator=(const TypeHandler&); -}; - - -template -class TypeHandler > -{ -public: - typedef typename Poco::TypeWrapper >::CONSTREFTYPE TupleConstRef; - typedef typename Poco::TypeWrapper >::REFTYPE TupleRef; - - static void bind(std::size_t pos, TupleConstRef tuple, AbstractBinder* pBinder, AbstractBinder::Direction dir) - { - poco_assert (pBinder != 0); - pBinder->bind(pos++, tuple.template get<0>(), dir); - pBinder->bind(pos++, tuple.template get<1>(), dir); - } - - static void prepare(std::size_t pos, TupleRef tuple, AbstractPreparation* pPrepare) - { - poco_assert (pPrepare != 0); - pPrepare->prepare(pos++, tuple.template get<0>()); - pPrepare->prepare(pos++, tuple.template get<1>()); - } - - static std::size_t size() - { - return Poco::Tuple::length; - } - - static void extract(std::size_t pos, TupleRef tuple, TupleConstRef defVal, AbstractExtractor* pExt) - { - poco_assert (pExt != 0); - if (!pExt->extract(pos++, tuple.template get<0>())) - tuple.template set<0>(defVal.template get<0>()); - if (!pExt->extract(pos++, tuple.template get<1>())) - tuple.template set<1>(defVal.template get<1>()); - } - -private: - TypeHandler(const TypeHandler&); - TypeHandler& operator=(const TypeHandler&); -}; - - -template -class TypeHandler > -{ -public: - typedef typename Poco::TypeWrapper >::CONSTREFTYPE TupleConstRef; - typedef typename Poco::TypeWrapper >::REFTYPE TupleRef; - - static void bind(std::size_t pos, TupleConstRef tuple, AbstractBinder* pBinder, AbstractBinder::Direction dir) - { - poco_assert (pBinder != 0); - pBinder->bind(pos++, tuple.template get<0>(), dir); - } - - static void prepare(std::size_t pos, TupleRef tuple, AbstractPreparation* pPrepare) - { - poco_assert (pPrepare != 0); - pPrepare->prepare(pos++, tuple.template get<0>()); - } - - static std::size_t size() - { - return Poco::Tuple::length; - } - - static void extract(std::size_t pos, TupleRef tuple, TupleConstRef defVal, - AbstractExtractor* pExt) - { - poco_assert (pExt != 0); - if (!pExt->extract(pos++, tuple.template get<0>())) - tuple.template set<0>(defVal.template get<0>()); - } - -private: - TypeHandler(const TypeHandler&); - TypeHandler& operator=(const TypeHandler&); -}; - - -} } // namespace Poco::Data - - -#endif // Data_TypeHandler_INCLUDED +// +// TypeHandler.h +// +// $Id: //poco/Main/Data/include/Poco/Data/TypeHandler.h#13 $ +// +// Library: Data +// Package: DataCore +// Module: TypeHandler +// +// Definition of the TypeHandler class. +// +// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// Permission is hereby granted, free of charge, to any person or organization +// obtaining a copy of the software and accompanying documentation covered by +// this license (the "Software") to use, reproduce, display, distribute, +// execute, and transmit the Software, and to prepare derivative works of the +// Software, and to permit third-parties to whom the Software is furnished to +// do so, all subject to the following: +// +// The copyright notices in the Software and this entire statement, including +// the above license grant, this restriction and the following disclaimer, +// must be included in all copies of the Software, in whole or in part, and +// all derivative works of the Software, unless such copies or derivative +// works are solely in the form of machine-executable object code generated by +// a source language processor. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +// DEALINGS IN THE SOFTWARE. +// + + +#ifndef Data_TypeHandler_INCLUDED +#define Data_TypeHandler_INCLUDED + + +#include "Poco/Data/Data.h" +#include "Poco/Data/AbstractBinder.h" +#include "Poco/Data/AbstractExtractor.h" +#include "Poco/Data/AbstractPreparation.h" +#include "Poco/Data/Nullable.h" +#include "Poco/Tuple.h" +#include + + +namespace Poco { +namespace Data { + + +class AbstractTypeHandler + /// Parent class for type handlers. + /// The reason for this class is to prevent instantiations of type handlers. + /// For documentation on type handlers, see TypeHandler class. +{ +protected: + AbstractTypeHandler(); + ~AbstractTypeHandler(); + AbstractTypeHandler(const AbstractTypeHandler&); + AbstractTypeHandler& operator = (const AbstractTypeHandler&); +}; + + +template +class TypeHandler: public AbstractTypeHandler + /// Converts Rows to a Type and the other way around. Provide template specializations to support your own complex types. + /// + /// Take as example the following (simplified) class: + /// class Person + /// { + /// private: + /// std::string _lastName; + /// std::string _firstName; + /// int _age; + /// [....] // public set/get methods, a default constructor, optional < operator (for set, multiset) or function operator (for map, multimap) + /// }; + /// + /// The TypeHandler must provide a custom bind, size, prepare and extract method: + /// + /// template <> + /// class TypeHandler + /// { + /// public: + /// static std::size_t size() + /// { + /// return 3; // lastName + firstname + age occupy three columns + /// } + /// + /// static void bind(std::size_t pos, const Person& obj, AbstractBinder* pBinder, AbstractBinder::Direction dir) + /// { + /// // the table is defined as Person (LastName VARCHAR(30), FirstName VARCHAR, Age INTEGER(3)) + /// // Note that we advance pos by the number of columns the datatype uses! For string/int this is one. + /// poco_assert_dbg (pBinder != 0); + /// TypeHandler::bind(pos++, obj.getLastName(), pBinder, dir); + /// TypeHandler::bind(pos++, obj.getFirstName(), pBinder, dir); + /// TypeHandler::bind(pos++, obj.getAge(), pBinder); + /// } + /// + /// static void prepare(std::size_t pos, const Person& obj, AbstractPreparation* pPrepare) + /// { + /// // the table is defined as Person (LastName VARCHAR(30), FirstName VARCHAR, Age INTEGER(3)) + /// poco_assert_dbg (pPrepare != 0); + /// TypeHandler::prepare(pos++, obj.getLastName(), pPrepare); + /// TypeHandler::prepare(pos++, obj.getFirstName(), pPrepare); + /// TypeHandler::prepare(pos++, obj.getAge(), pPrepare); + /// } + /// + /// static void extract(std::size_t pos, Person& obj, const Person& defVal, AbstractExtractor* pExt) + /// { + /// // defVal is the default person we should use if we encunter NULL entries, so we take the individual fields + /// // as defaults. You can do more complex checking, ie return defVal if only one single entry of the fields is null etc... + /// poco_assert_dbg (pExt != 0); + /// std::string lastName; + /// std::string firstName; + /// int age = 0; + /// // the table is defined as Person (LastName VARCHAR(30), FirstName VARCHAR, Age INTEGER(3)) + /// TypeHandler::extract(pos++, lastName, defVal.getLastName(), pExt); + /// TypeHandler::extract(pos++, firstName, defVal.getFirstName(), pExt); + /// TypeHandler::extract(pos++, age, defVal.getAge(), pExt); + /// obj.setLastName(lastName); + /// obj.setFirstName(firstName); + /// obj.setAge(age); + /// } + /// }; + /// + /// Note that the TypeHandler template specialization must always be declared in the namespace Poco::Data. + /// Apart from that no further work is needed. One can now use Person with into and use clauses. +{ +public: + static void bind(std::size_t pos, const T& obj, AbstractBinder* pBinder, AbstractBinder::Direction dir) + { + poco_assert_dbg (pBinder != 0); + pBinder->bind(pos, obj, dir); + } + + static std::size_t size() + { + return 1; + } + + static void extract(std::size_t pos, T& obj, const T& defVal, AbstractExtractor* pExt) + { + poco_assert_dbg (pExt != 0); + if (!pExt->extract(pos, obj)) obj = defVal; + } + + static void prepare(std::size_t pos, T& obj, AbstractPreparation* pPrepare) + { + poco_assert_dbg (pPrepare != 0); + pPrepare->prepare(pos, obj); + } + +private: + TypeHandler(const TypeHandler&); + TypeHandler& operator = (const TypeHandler&); +}; + + +template +class TypeHandler >: public AbstractTypeHandler + /// Specialization of type handler for std::deque. +{ +public: + static void bind(std::size_t pos, const std::deque& obj, AbstractBinder* pBinder, AbstractBinder::Direction dir) + { + poco_assert_dbg (pBinder != 0); + pBinder->bind(pos, obj, dir); + } + + static std::size_t size() + { + return 1; + } + + static void extract(std::size_t pos, std::deque& obj, const T& defVal, AbstractExtractor* pExt) + { + poco_assert_dbg (pExt != 0); + if (!pExt->extract(pos, obj)) + obj.assign(obj.size(), defVal); + } + + static void prepare(std::size_t pos, std::deque& obj, AbstractPreparation* pPrepare) + { + poco_assert_dbg (pPrepare != 0); + pPrepare->prepare(pos, obj); + } + +private: + TypeHandler(const TypeHandler&); + TypeHandler& operator = (const TypeHandler&); +}; + + +template +class TypeHandler >: public AbstractTypeHandler + /// Specialization of type handler for std::vector. +{ +public: + static void bind(std::size_t pos, const std::vector& obj, AbstractBinder* pBinder, AbstractBinder::Direction dir) + { + poco_assert_dbg (pBinder != 0); + pBinder->bind(pos, obj, dir); + } + + static std::size_t size() + { + return 1; + } + + static void extract(std::size_t pos, std::vector& obj, const T& defVal, AbstractExtractor* pExt) + { + poco_assert_dbg (pExt != 0); + if (!pExt->extract(pos, obj)) + obj.assign(obj.size(), defVal); + } + + static void prepare(std::size_t pos, std::vector& obj, AbstractPreparation* pPrepare) + { + poco_assert_dbg (pPrepare != 0); + pPrepare->prepare(pos, obj); + } + +private: + TypeHandler(const TypeHandler&); + TypeHandler& operator = (const TypeHandler&); +}; + + +template +class TypeHandler >: public AbstractTypeHandler + /// Specialization of type handler for std::list. +{ +public: + static void bind(std::size_t pos, const std::list& obj, AbstractBinder* pBinder, AbstractBinder::Direction dir) + { + poco_assert_dbg (pBinder != 0); + pBinder->bind(pos, obj, dir); + } + + static std::size_t size() + { + return 1; + } + + static void extract(std::size_t pos, std::list& obj, const T& defVal, AbstractExtractor* pExt) + { + poco_assert_dbg (pExt != 0); + if (!pExt->extract(pos, obj)) + obj.assign(obj.size(), defVal); + } + + static void prepare(std::size_t pos, std::list& obj, AbstractPreparation* pPrepare) + { + poco_assert_dbg (pPrepare != 0); + pPrepare->prepare(pos, obj); + } + +private: + TypeHandler(const TypeHandler&); + TypeHandler& operator = (const TypeHandler&); +}; + +template +class TypeHandler< Nullable > + /// Specialization of type handler for Nullable. +{ +public: + + static void bind(std::size_t pos, const Nullable& obj, AbstractBinder* pBinder, AbstractBinder::Direction dir) + { + poco_assert_dbg (pBinder != 0); + if (obj.isNull()) + { + pBinder->bind(pos++, Poco::Data::Keywords::null, dir); + } + else + { + pBinder->bind(pos++, obj.getValue(), dir); + } + } + + static void prepare(std::size_t pos, Nullable& obj, AbstractPreparation* pPrepare) + { + poco_assert_dbg (pPrepare != 0); + if (obj.isNull()) + { + pPrepare->prepare(pos++, (Poco::Any&)Poco::Data::Keywords::null); + } + else + { + pPrepare->prepare(pos++, (T&)obj.getValue()); + } + } + + static std::size_t size() + { + return 1; + } + + static void extract(std::size_t pos, Nullable& obj, const Nullable& , AbstractExtractor* pExt) + { + poco_assert_dbg (pExt != 0); + T value; + + if (pExt->extract(pos++, value)) + { + obj.setValue(value); + } + else + { + obj.setNull(true); + } + } + +private: + + TypeHandler(); + ~TypeHandler(); + TypeHandler(const TypeHandler&); + TypeHandler& operator=(const TypeHandler&); +}; + + +/// Poco::Tuple TypeHandler specializations + + +template +class TypeHandler > +{ +public: + typedef typename Poco::TypeWrapper >::CONSTREFTYPE TupleConstRef; + typedef typename Poco::TypeWrapper >::REFTYPE TupleRef; + + static void bind(std::size_t pos, TupleConstRef tuple, AbstractBinder* pBinder, AbstractBinder::Direction dir) + { + poco_assert (pBinder != 0); + TypeHandler::bind(pos++, tuple.template get<0>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<1>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<2>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<3>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<4>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<5>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<6>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<7>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<8>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<9>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<10>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<11>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<12>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<13>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<14>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<15>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<16>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<17>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<18>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<19>(), pBinder, dir); + } + + static void prepare(std::size_t pos, TupleRef tuple, AbstractPreparation* pPrepare) + { + poco_assert (pPrepare != 0); + TypeHandler::prepare(pos++, tuple.template get<0>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<1>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<2>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<3>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<4>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<5>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<6>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<7>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<8>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<9>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<10>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<11>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<12>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<13>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<14>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<15>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<16>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<17>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<18>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<19>(), pPrepare); + } + + static std::size_t size() + { + return Poco::Tuple::length; + } + + static void extract(std::size_t pos, TupleRef tuple, TupleConstRef defVal, AbstractExtractor* pExt) + { + poco_assert (pExt != 0); + TypeHandler::extract(pos++, tuple.template get<0>(), defVal.template get<0>(), pExt); + TypeHandler::extract(pos++, tuple.template get<1>(), defVal.template get<1>(), pExt); + TypeHandler::extract(pos++, tuple.template get<2>(), defVal.template get<2>(), pExt); + TypeHandler::extract(pos++, tuple.template get<3>(), defVal.template get<3>(), pExt); + TypeHandler::extract(pos++, tuple.template get<4>(), defVal.template get<4>(), pExt); + TypeHandler::extract(pos++, tuple.template get<5>(), defVal.template get<5>(), pExt); + TypeHandler::extract(pos++, tuple.template get<6>(), defVal.template get<6>(), pExt); + TypeHandler::extract(pos++, tuple.template get<7>(), defVal.template get<7>(), pExt); + TypeHandler::extract(pos++, tuple.template get<8>(), defVal.template get<8>(), pExt); + TypeHandler::extract(pos++, tuple.template get<9>(), defVal.template get<9>(), pExt); + TypeHandler::extract(pos++, tuple.template get<10>(), defVal.template get<10>(), pExt); + TypeHandler::extract(pos++, tuple.template get<11>(), defVal.template get<11>(), pExt); + TypeHandler::extract(pos++, tuple.template get<12>(), defVal.template get<12>(), pExt); + TypeHandler::extract(pos++, tuple.template get<13>(), defVal.template get<13>(), pExt); + TypeHandler::extract(pos++, tuple.template get<14>(), defVal.template get<14>(), pExt); + TypeHandler::extract(pos++, tuple.template get<15>(), defVal.template get<15>(), pExt); + TypeHandler::extract(pos++, tuple.template get<16>(), defVal.template get<16>(), pExt); + TypeHandler::extract(pos++, tuple.template get<17>(), defVal.template get<17>(), pExt); + TypeHandler::extract(pos++, tuple.template get<18>(), defVal.template get<18>(), pExt); + TypeHandler::extract(pos++, tuple.template get<19>(), defVal.template get<19>(), pExt); + } + +private: + TypeHandler(const TypeHandler&); + TypeHandler& operator=(const TypeHandler&); +}; + + +template +class TypeHandler > +{ +public: + typedef typename Poco::TypeWrapper >::CONSTREFTYPE TupleConstRef; + typedef typename Poco::TypeWrapper >::REFTYPE TupleRef; + + static void bind(std::size_t pos, TupleConstRef tuple, AbstractBinder* pBinder, AbstractBinder::Direction dir) + { + poco_assert (pBinder != 0); + TypeHandler::bind(pos++, tuple.template get<0>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<1>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<2>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<3>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<4>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<5>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<6>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<7>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<8>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<9>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<10>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<11>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<12>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<13>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<14>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<15>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<16>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<17>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<18>(), pBinder, dir); + } + + static void prepare(std::size_t pos, TupleRef tuple, AbstractPreparation* pPrepare) + { + poco_assert (pPrepare != 0); + TypeHandler::prepare(pos++, tuple.template get<0>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<1>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<2>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<3>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<4>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<5>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<6>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<7>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<8>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<9>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<10>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<11>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<12>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<13>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<14>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<15>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<16>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<17>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<18>(), pPrepare); + } + + static std::size_t size() + { + return Poco::Tuple::length; + } + + static void extract(std::size_t pos, TupleRef tuple, TupleConstRef defVal, AbstractExtractor* pExt) + { + poco_assert (pExt != 0); + TypeHandler::extract(pos++, tuple.template get<0>(), defVal.template get<0>(), pExt); + TypeHandler::extract(pos++, tuple.template get<1>(), defVal.template get<1>(), pExt); + TypeHandler::extract(pos++, tuple.template get<2>(), defVal.template get<2>(), pExt); + TypeHandler::extract(pos++, tuple.template get<3>(), defVal.template get<3>(), pExt); + TypeHandler::extract(pos++, tuple.template get<4>(), defVal.template get<4>(), pExt); + TypeHandler::extract(pos++, tuple.template get<5>(), defVal.template get<5>(), pExt); + TypeHandler::extract(pos++, tuple.template get<6>(), defVal.template get<6>(), pExt); + TypeHandler::extract(pos++, tuple.template get<7>(), defVal.template get<7>(), pExt); + TypeHandler::extract(pos++, tuple.template get<8>(), defVal.template get<8>(), pExt); + TypeHandler::extract(pos++, tuple.template get<9>(), defVal.template get<9>(), pExt); + TypeHandler::extract(pos++, tuple.template get<10>(), defVal.template get<10>(), pExt); + TypeHandler::extract(pos++, tuple.template get<11>(), defVal.template get<11>(), pExt); + TypeHandler::extract(pos++, tuple.template get<12>(), defVal.template get<12>(), pExt); + TypeHandler::extract(pos++, tuple.template get<13>(), defVal.template get<13>(), pExt); + TypeHandler::extract(pos++, tuple.template get<14>(), defVal.template get<14>(), pExt); + TypeHandler::extract(pos++, tuple.template get<15>(), defVal.template get<15>(), pExt); + TypeHandler::extract(pos++, tuple.template get<16>(), defVal.template get<16>(), pExt); + TypeHandler::extract(pos++, tuple.template get<17>(), defVal.template get<17>(), pExt); + TypeHandler::extract(pos++, tuple.template get<18>(), defVal.template get<18>(), pExt); + } + +private: + TypeHandler(const TypeHandler&); + TypeHandler& operator=(const TypeHandler&); +}; + + +template +class TypeHandler > +{ +public: + typedef typename Poco::TypeWrapper >::CONSTREFTYPE TupleConstRef; + typedef typename Poco::TypeWrapper >::REFTYPE TupleRef; + + static void bind(std::size_t pos, TupleConstRef tuple, AbstractBinder* pBinder, AbstractBinder::Direction dir) + { + poco_assert (pBinder != 0); + TypeHandler::bind(pos++, tuple.template get<0>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<1>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<2>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<3>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<4>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<5>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<6>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<7>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<8>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<9>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<10>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<11>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<12>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<13>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<14>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<15>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<16>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<17>(), pBinder, dir); + } + + static void prepare(std::size_t pos, TupleRef tuple, AbstractPreparation* pPrepare) + { + poco_assert (pPrepare != 0); + TypeHandler::prepare(pos++, tuple.template get<0>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<1>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<2>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<3>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<4>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<5>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<6>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<7>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<8>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<9>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<10>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<11>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<12>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<13>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<14>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<15>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<16>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<17>(), pPrepare); + } + + static std::size_t size() + { + return Poco::Tuple::length; + } + + static void extract(std::size_t pos, TupleRef tuple, TupleConstRef defVal, AbstractExtractor* pExt) + { + poco_assert (pExt != 0); + TypeHandler::extract(pos++, tuple.template get<0>(), defVal.template get<0>(), pExt); + TypeHandler::extract(pos++, tuple.template get<1>(), defVal.template get<1>(), pExt); + TypeHandler::extract(pos++, tuple.template get<2>(), defVal.template get<2>(), pExt); + TypeHandler::extract(pos++, tuple.template get<3>(), defVal.template get<3>(), pExt); + TypeHandler::extract(pos++, tuple.template get<4>(), defVal.template get<4>(), pExt); + TypeHandler::extract(pos++, tuple.template get<5>(), defVal.template get<5>(), pExt); + TypeHandler::extract(pos++, tuple.template get<6>(), defVal.template get<6>(), pExt); + TypeHandler::extract(pos++, tuple.template get<7>(), defVal.template get<7>(), pExt); + TypeHandler::extract(pos++, tuple.template get<8>(), defVal.template get<8>(), pExt); + TypeHandler::extract(pos++, tuple.template get<9>(), defVal.template get<9>(), pExt); + TypeHandler::extract(pos++, tuple.template get<10>(), defVal.template get<10>(), pExt); + TypeHandler::extract(pos++, tuple.template get<11>(), defVal.template get<11>(), pExt); + TypeHandler::extract(pos++, tuple.template get<12>(), defVal.template get<12>(), pExt); + TypeHandler::extract(pos++, tuple.template get<13>(), defVal.template get<13>(), pExt); + TypeHandler::extract(pos++, tuple.template get<14>(), defVal.template get<14>(), pExt); + TypeHandler::extract(pos++, tuple.template get<15>(), defVal.template get<15>(), pExt); + TypeHandler::extract(pos++, tuple.template get<16>(), defVal.template get<16>(), pExt); + TypeHandler::extract(pos++, tuple.template get<17>(), defVal.template get<17>(), pExt); + } + +private: + TypeHandler(const TypeHandler&); + TypeHandler& operator=(const TypeHandler&); +}; + + +template +class TypeHandler > +{ +public: + typedef typename Poco::TypeWrapper >::CONSTREFTYPE TupleConstRef; + typedef typename Poco::TypeWrapper >::REFTYPE TupleRef; + + static void bind(std::size_t pos, TupleConstRef tuple, AbstractBinder* pBinder, AbstractBinder::Direction dir) + { + poco_assert (pBinder != 0); + TypeHandler::bind(pos++, tuple.template get<0>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<1>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<2>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<3>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<4>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<5>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<6>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<7>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<8>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<9>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<10>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<11>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<12>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<13>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<14>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<15>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<16>(), pBinder, dir); + } + + static void prepare(std::size_t pos, TupleRef tuple, AbstractPreparation* pPrepare) + { + poco_assert (pPrepare != 0); + TypeHandler::prepare(pos++, tuple.template get<0>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<1>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<2>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<3>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<4>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<5>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<6>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<7>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<8>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<9>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<10>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<11>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<12>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<13>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<14>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<15>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<16>(), pPrepare); + } + + static std::size_t size() + { + return Poco::Tuple::length; + } + + static void extract(std::size_t pos, TupleRef tuple, TupleConstRef defVal, AbstractExtractor* pExt) + { + poco_assert (pExt != 0); + TypeHandler::extract(pos++, tuple.template get<0>(), defVal.template get<0>(), pExt); + TypeHandler::extract(pos++, tuple.template get<1>(), defVal.template get<1>(), pExt); + TypeHandler::extract(pos++, tuple.template get<2>(), defVal.template get<2>(), pExt); + TypeHandler::extract(pos++, tuple.template get<3>(), defVal.template get<3>(), pExt); + TypeHandler::extract(pos++, tuple.template get<4>(), defVal.template get<4>(), pExt); + TypeHandler::extract(pos++, tuple.template get<5>(), defVal.template get<5>(), pExt); + TypeHandler::extract(pos++, tuple.template get<6>(), defVal.template get<6>(), pExt); + TypeHandler::extract(pos++, tuple.template get<7>(), defVal.template get<7>(), pExt); + TypeHandler::extract(pos++, tuple.template get<8>(), defVal.template get<8>(), pExt); + TypeHandler::extract(pos++, tuple.template get<9>(), defVal.template get<9>(), pExt); + TypeHandler::extract(pos++, tuple.template get<10>(), defVal.template get<10>(), pExt); + TypeHandler::extract(pos++, tuple.template get<11>(), defVal.template get<11>(), pExt); + TypeHandler::extract(pos++, tuple.template get<12>(), defVal.template get<12>(), pExt); + TypeHandler::extract(pos++, tuple.template get<13>(), defVal.template get<13>(), pExt); + TypeHandler::extract(pos++, tuple.template get<14>(), defVal.template get<14>(), pExt); + TypeHandler::extract(pos++, tuple.template get<15>(), defVal.template get<15>(), pExt); + TypeHandler::extract(pos++, tuple.template get<16>(), defVal.template get<16>(), pExt); + } + +private: + TypeHandler(const TypeHandler&); + TypeHandler& operator=(const TypeHandler&); +}; + + +template +class TypeHandler > +{ +public: + typedef typename Poco::TypeWrapper >::CONSTREFTYPE TupleConstRef; + typedef typename Poco::TypeWrapper >::REFTYPE TupleRef; + + static void bind(std::size_t pos, TupleConstRef tuple, AbstractBinder* pBinder, AbstractBinder::Direction dir) + { + poco_assert (pBinder != 0); + TypeHandler::bind(pos++, tuple.template get<0>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<1>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<2>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<3>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<4>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<5>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<6>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<7>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<8>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<9>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<10>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<11>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<12>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<13>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<14>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<15>(), pBinder, dir); + } + + static void prepare(std::size_t pos, TupleRef tuple, AbstractPreparation* pPrepare) + { + poco_assert (pPrepare != 0); + TypeHandler::prepare(pos++, tuple.template get<0>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<1>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<2>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<3>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<4>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<5>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<6>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<7>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<8>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<9>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<10>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<11>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<12>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<13>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<14>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<15>(), pPrepare); + } + + static std::size_t size() + { + return Poco::Tuple::length; + } + + static void extract(std::size_t pos, TupleRef tuple, TupleConstRef defVal, AbstractExtractor* pExt) + { + poco_assert (pExt != 0); + TypeHandler::extract(pos++, tuple.template get<0>(), defVal.template get<0>(), pExt); + TypeHandler::extract(pos++, tuple.template get<1>(), defVal.template get<1>(), pExt); + TypeHandler::extract(pos++, tuple.template get<2>(), defVal.template get<2>(), pExt); + TypeHandler::extract(pos++, tuple.template get<3>(), defVal.template get<3>(), pExt); + TypeHandler::extract(pos++, tuple.template get<4>(), defVal.template get<4>(), pExt); + TypeHandler::extract(pos++, tuple.template get<5>(), defVal.template get<5>(), pExt); + TypeHandler::extract(pos++, tuple.template get<6>(), defVal.template get<6>(), pExt); + TypeHandler::extract(pos++, tuple.template get<7>(), defVal.template get<7>(), pExt); + TypeHandler::extract(pos++, tuple.template get<8>(), defVal.template get<8>(), pExt); + TypeHandler::extract(pos++, tuple.template get<9>(), defVal.template get<9>(), pExt); + TypeHandler::extract(pos++, tuple.template get<10>(), defVal.template get<10>(), pExt); + TypeHandler::extract(pos++, tuple.template get<11>(), defVal.template get<11>(), pExt); + TypeHandler::extract(pos++, tuple.template get<12>(), defVal.template get<12>(), pExt); + TypeHandler::extract(pos++, tuple.template get<13>(), defVal.template get<13>(), pExt); + TypeHandler::extract(pos++, tuple.template get<14>(), defVal.template get<14>(), pExt); + TypeHandler::extract(pos++, tuple.template get<15>(), defVal.template get<15>(), pExt); + } + +private: + TypeHandler(const TypeHandler&); + TypeHandler& operator=(const TypeHandler&); +}; + + +template +class TypeHandler > +{ +public: + typedef typename Poco::TypeWrapper >::CONSTREFTYPE TupleConstRef; + typedef typename Poco::TypeWrapper >::REFTYPE TupleRef; + + static void bind(std::size_t pos, TupleConstRef tuple, AbstractBinder* pBinder, AbstractBinder::Direction dir) + { + poco_assert (pBinder != 0); + TypeHandler::bind(pos++, tuple.template get<0>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<1>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<2>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<3>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<4>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<5>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<6>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<7>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<8>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<9>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<10>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<11>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<12>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<13>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<14>(), pBinder, dir); + } + + static void prepare(std::size_t pos, TupleRef tuple, AbstractPreparation* pPrepare) + { + poco_assert (pPrepare != 0); + TypeHandler::prepare(pos++, tuple.template get<0>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<1>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<2>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<3>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<4>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<5>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<6>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<7>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<8>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<9>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<10>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<11>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<12>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<13>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<14>(), pPrepare); + } + + static std::size_t size() + { + return Poco::Tuple::length; + } + + static void extract(std::size_t pos, TupleRef tuple, TupleConstRef defVal, AbstractExtractor* pExt) + { + poco_assert (pExt != 0); + TypeHandler::extract(pos++, tuple.template get<0>(), defVal.template get<0>(), pExt); + TypeHandler::extract(pos++, tuple.template get<1>(), defVal.template get<1>(), pExt); + TypeHandler::extract(pos++, tuple.template get<2>(), defVal.template get<2>(), pExt); + TypeHandler::extract(pos++, tuple.template get<3>(), defVal.template get<3>(), pExt); + TypeHandler::extract(pos++, tuple.template get<4>(), defVal.template get<4>(), pExt); + TypeHandler::extract(pos++, tuple.template get<5>(), defVal.template get<5>(), pExt); + TypeHandler::extract(pos++, tuple.template get<6>(), defVal.template get<6>(), pExt); + TypeHandler::extract(pos++, tuple.template get<7>(), defVal.template get<7>(), pExt); + TypeHandler::extract(pos++, tuple.template get<8>(), defVal.template get<8>(), pExt); + TypeHandler::extract(pos++, tuple.template get<9>(), defVal.template get<9>(), pExt); + TypeHandler::extract(pos++, tuple.template get<10>(), defVal.template get<10>(), pExt); + TypeHandler::extract(pos++, tuple.template get<11>(), defVal.template get<11>(), pExt); + TypeHandler::extract(pos++, tuple.template get<12>(), defVal.template get<12>(), pExt); + TypeHandler::extract(pos++, tuple.template get<13>(), defVal.template get<13>(), pExt); + TypeHandler::extract(pos++, tuple.template get<14>(), defVal.template get<14>(), pExt); + } + +private: + TypeHandler(const TypeHandler&); + TypeHandler& operator=(const TypeHandler&); +}; + + +template +class TypeHandler > +{ +public: + typedef typename Poco::TypeWrapper >::CONSTREFTYPE TupleConstRef; + typedef typename Poco::TypeWrapper >::REFTYPE TupleRef; + + static void bind(std::size_t pos, TupleConstRef tuple, AbstractBinder* pBinder, AbstractBinder::Direction dir) + { + poco_assert (pBinder != 0); + TypeHandler::bind(pos++, tuple.template get<0>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<1>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<2>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<3>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<4>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<5>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<6>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<7>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<8>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<9>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<10>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<11>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<12>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<13>(), pBinder, dir); + } + + static void prepare(std::size_t pos, TupleRef tuple, AbstractPreparation* pPrepare) + { + poco_assert (pPrepare != 0); + TypeHandler::prepare(pos++, tuple.template get<0>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<1>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<2>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<3>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<4>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<5>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<6>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<7>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<8>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<9>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<10>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<11>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<12>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<13>(), pPrepare); + } + + static std::size_t size() + { + return Poco::Tuple::length; + } + + static void extract(std::size_t pos, TupleRef tuple, TupleConstRef defVal, AbstractExtractor* pExt) + { + poco_assert (pExt != 0); + TypeHandler::extract(pos++, tuple.template get<0>(), defVal.template get<0>(), pExt); + TypeHandler::extract(pos++, tuple.template get<1>(), defVal.template get<1>(), pExt); + TypeHandler::extract(pos++, tuple.template get<2>(), defVal.template get<2>(), pExt); + TypeHandler::extract(pos++, tuple.template get<3>(), defVal.template get<3>(), pExt); + TypeHandler::extract(pos++, tuple.template get<4>(), defVal.template get<4>(), pExt); + TypeHandler::extract(pos++, tuple.template get<5>(), defVal.template get<5>(), pExt); + TypeHandler::extract(pos++, tuple.template get<6>(), defVal.template get<6>(), pExt); + TypeHandler::extract(pos++, tuple.template get<7>(), defVal.template get<7>(), pExt); + TypeHandler::extract(pos++, tuple.template get<8>(), defVal.template get<8>(), pExt); + TypeHandler::extract(pos++, tuple.template get<9>(), defVal.template get<9>(), pExt); + TypeHandler::extract(pos++, tuple.template get<10>(), defVal.template get<10>(), pExt); + TypeHandler::extract(pos++, tuple.template get<11>(), defVal.template get<11>(), pExt); + TypeHandler::extract(pos++, tuple.template get<12>(), defVal.template get<12>(), pExt); + TypeHandler::extract(pos++, tuple.template get<13>(), defVal.template get<13>(), pExt); + } + +private: + TypeHandler(const TypeHandler&); + TypeHandler& operator=(const TypeHandler&); +}; + + +template +class TypeHandler > +{ +public: + typedef typename Poco::TypeWrapper >::CONSTREFTYPE TupleConstRef; + typedef typename Poco::TypeWrapper >::REFTYPE TupleRef; + + static void bind(std::size_t pos, TupleConstRef tuple, AbstractBinder* pBinder, AbstractBinder::Direction dir) + { + poco_assert (pBinder != 0); + TypeHandler::bind(pos++, tuple.template get<0>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<1>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<2>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<3>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<4>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<5>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<6>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<7>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<8>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<9>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<10>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<11>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<12>(), pBinder, dir); + } + + static void prepare(std::size_t pos, TupleRef tuple, AbstractPreparation* pPrepare) + { + poco_assert (pPrepare != 0); + TypeHandler::prepare(pos++, tuple.template get<0>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<1>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<2>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<3>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<4>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<5>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<6>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<7>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<8>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<9>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<10>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<11>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<12>(), pPrepare); + } + + static std::size_t size() + { + return Poco::Tuple::length; + } + + static void extract(std::size_t pos, TupleRef tuple, TupleConstRef defVal, AbstractExtractor* pExt) + { + poco_assert (pExt != 0); + TypeHandler::extract(pos++, tuple.template get<0>(), defVal.template get<0>(), pExt); + TypeHandler::extract(pos++, tuple.template get<1>(), defVal.template get<1>(), pExt); + TypeHandler::extract(pos++, tuple.template get<2>(), defVal.template get<2>(), pExt); + TypeHandler::extract(pos++, tuple.template get<3>(), defVal.template get<3>(), pExt); + TypeHandler::extract(pos++, tuple.template get<4>(), defVal.template get<4>(), pExt); + TypeHandler::extract(pos++, tuple.template get<5>(), defVal.template get<5>(), pExt); + TypeHandler::extract(pos++, tuple.template get<6>(), defVal.template get<6>(), pExt); + TypeHandler::extract(pos++, tuple.template get<7>(), defVal.template get<7>(), pExt); + TypeHandler::extract(pos++, tuple.template get<8>(), defVal.template get<8>(), pExt); + TypeHandler::extract(pos++, tuple.template get<9>(), defVal.template get<9>(), pExt); + TypeHandler::extract(pos++, tuple.template get<10>(), defVal.template get<10>(), pExt); + TypeHandler::extract(pos++, tuple.template get<11>(), defVal.template get<11>(), pExt); + TypeHandler::extract(pos++, tuple.template get<12>(), defVal.template get<12>(), pExt); + } + +private: + TypeHandler(const TypeHandler&); + TypeHandler& operator=(const TypeHandler&); +}; + + +template +class TypeHandler > +{ +public: + typedef typename Poco::TypeWrapper >::CONSTREFTYPE TupleConstRef; + typedef typename Poco::TypeWrapper >::REFTYPE TupleRef; + + static void bind(std::size_t pos, TupleConstRef tuple, AbstractBinder* pBinder, AbstractBinder::Direction dir) + { + poco_assert (pBinder != 0); + TypeHandler::bind(pos++, tuple.template get<0>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<1>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<2>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<3>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<4>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<5>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<6>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<7>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<8>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<9>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<10>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<11>(), pBinder, dir); + } + + static void prepare(std::size_t pos, TupleRef tuple, AbstractPreparation* pPrepare) + { + poco_assert (pPrepare != 0); + TypeHandler::prepare(pos++, tuple.template get<0>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<1>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<2>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<3>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<4>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<5>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<6>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<7>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<8>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<9>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<10>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<11>(), pPrepare); + } + + static std::size_t size() + { + return Poco::Tuple::length; + } + + static void extract(std::size_t pos, TupleRef tuple, TupleConstRef defVal, AbstractExtractor* pExt) + { + poco_assert (pExt != 0); + TypeHandler::extract(pos++, tuple.template get<0>(), defVal.template get<0>(), pExt); + TypeHandler::extract(pos++, tuple.template get<1>(), defVal.template get<1>(), pExt); + TypeHandler::extract(pos++, tuple.template get<2>(), defVal.template get<2>(), pExt); + TypeHandler::extract(pos++, tuple.template get<3>(), defVal.template get<3>(), pExt); + TypeHandler::extract(pos++, tuple.template get<4>(), defVal.template get<4>(), pExt); + TypeHandler::extract(pos++, tuple.template get<5>(), defVal.template get<5>(), pExt); + TypeHandler::extract(pos++, tuple.template get<6>(), defVal.template get<6>(), pExt); + TypeHandler::extract(pos++, tuple.template get<7>(), defVal.template get<7>(), pExt); + TypeHandler::extract(pos++, tuple.template get<8>(), defVal.template get<8>(), pExt); + TypeHandler::extract(pos++, tuple.template get<9>(), defVal.template get<9>(), pExt); + TypeHandler::extract(pos++, tuple.template get<10>(), defVal.template get<10>(), pExt); + TypeHandler::extract(pos++, tuple.template get<11>(), defVal.template get<11>(), pExt); + } + +private: + TypeHandler(const TypeHandler&); + TypeHandler& operator=(const TypeHandler&); +}; + + +template +class TypeHandler > +{ +public: + typedef typename Poco::TypeWrapper >::CONSTREFTYPE TupleConstRef; + typedef typename Poco::TypeWrapper >::REFTYPE TupleRef; + + static void bind(std::size_t pos, TupleConstRef tuple, AbstractBinder* pBinder, AbstractBinder::Direction dir) + { + poco_assert (pBinder != 0); + TypeHandler::bind(pos++, tuple.template get<0>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<1>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<2>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<3>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<4>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<5>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<6>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<7>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<8>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<9>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<10>(), pBinder, dir); + } + + static void prepare(std::size_t pos, TupleRef tuple, AbstractPreparation* pPrepare) + { + poco_assert (pPrepare != 0); + TypeHandler::prepare(pos++, tuple.template get<0>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<1>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<2>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<3>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<4>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<5>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<6>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<7>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<8>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<9>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<10>(), pPrepare); + } + + static std::size_t size() + { + return Poco::Tuple::length; + } + + static void extract(std::size_t pos, TupleRef tuple, TupleConstRef defVal, AbstractExtractor* pExt) + { + poco_assert (pExt != 0); + TypeHandler::extract(pos++, tuple.template get<0>(), defVal.template get<0>(), pExt); + TypeHandler::extract(pos++, tuple.template get<1>(), defVal.template get<1>(), pExt); + TypeHandler::extract(pos++, tuple.template get<2>(), defVal.template get<2>(), pExt); + TypeHandler::extract(pos++, tuple.template get<3>(), defVal.template get<3>(), pExt); + TypeHandler::extract(pos++, tuple.template get<4>(), defVal.template get<4>(), pExt); + TypeHandler::extract(pos++, tuple.template get<5>(), defVal.template get<5>(), pExt); + TypeHandler::extract(pos++, tuple.template get<6>(), defVal.template get<6>(), pExt); + TypeHandler::extract(pos++, tuple.template get<7>(), defVal.template get<7>(), pExt); + TypeHandler::extract(pos++, tuple.template get<8>(), defVal.template get<8>(), pExt); + TypeHandler::extract(pos++, tuple.template get<9>(), defVal.template get<9>(), pExt); + TypeHandler::extract(pos++, tuple.template get<10>(), defVal.template get<10>(), pExt); + } + +private: + TypeHandler(const TypeHandler&); + TypeHandler& operator=(const TypeHandler&); +}; + + +template +class TypeHandler > +{ +public: + typedef typename Poco::TypeWrapper >::CONSTREFTYPE TupleConstRef; + typedef typename Poco::TypeWrapper >::REFTYPE TupleRef; + + static void bind(std::size_t pos, TupleConstRef tuple, AbstractBinder* pBinder, AbstractBinder::Direction dir) + { + poco_assert (pBinder != 0); + TypeHandler::bind(pos++, tuple.template get<0>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<1>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<2>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<3>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<4>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<5>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<6>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<7>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<8>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<9>(), pBinder, dir); + } + + static void prepare(std::size_t pos, TupleRef tuple, AbstractPreparation* pPrepare) + { + poco_assert (pPrepare != 0); + TypeHandler::prepare(pos++, tuple.template get<0>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<1>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<2>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<3>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<4>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<5>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<6>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<7>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<8>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<9>(), pPrepare); + } + + static std::size_t size() + { + return Poco::Tuple::length; + } + + static void extract(std::size_t pos, TupleRef tuple, TupleConstRef defVal, AbstractExtractor* pExt) + { + poco_assert (pExt != 0); + TypeHandler::extract(pos++, tuple.template get<0>(), defVal.template get<0>(), pExt); + TypeHandler::extract(pos++, tuple.template get<1>(), defVal.template get<1>(), pExt); + TypeHandler::extract(pos++, tuple.template get<2>(), defVal.template get<2>(), pExt); + TypeHandler::extract(pos++, tuple.template get<3>(), defVal.template get<3>(), pExt); + TypeHandler::extract(pos++, tuple.template get<4>(), defVal.template get<4>(), pExt); + TypeHandler::extract(pos++, tuple.template get<5>(), defVal.template get<5>(), pExt); + TypeHandler::extract(pos++, tuple.template get<6>(), defVal.template get<6>(), pExt); + TypeHandler::extract(pos++, tuple.template get<7>(), defVal.template get<7>(), pExt); + TypeHandler::extract(pos++, tuple.template get<8>(), defVal.template get<8>(), pExt); + TypeHandler::extract(pos++, tuple.template get<9>(), defVal.template get<9>(), pExt); + } + +private: + TypeHandler(const TypeHandler&); + TypeHandler& operator=(const TypeHandler&); +}; + + +template +class TypeHandler > +{ +public: + typedef typename Poco::TypeWrapper >::CONSTREFTYPE TupleConstRef; + typedef typename Poco::TypeWrapper >::REFTYPE TupleRef; + + static void bind(std::size_t pos, TupleConstRef tuple, AbstractBinder* pBinder, AbstractBinder::Direction dir) + { + poco_assert (pBinder != 0); + TypeHandler::bind(pos++, tuple.template get<0>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<1>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<2>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<3>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<4>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<5>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<6>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<7>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<8>(), pBinder, dir); + } + + static void prepare(std::size_t pos, TupleRef tuple, AbstractPreparation* pPrepare) + { + poco_assert (pPrepare != 0); + TypeHandler::prepare(pos++, tuple.template get<0>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<1>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<2>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<3>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<4>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<5>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<6>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<7>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<8>(), pPrepare); + } + + static std::size_t size() + { + return Poco::Tuple::length; + } + + static void extract(std::size_t pos, TupleRef tuple, TupleConstRef defVal, AbstractExtractor* pExt) + { + poco_assert (pExt != 0); + TypeHandler::extract(pos++, tuple.template get<0>(), defVal.template get<0>(), pExt); + TypeHandler::extract(pos++, tuple.template get<1>(), defVal.template get<1>(), pExt); + TypeHandler::extract(pos++, tuple.template get<2>(), defVal.template get<2>(), pExt); + TypeHandler::extract(pos++, tuple.template get<3>(), defVal.template get<3>(), pExt); + TypeHandler::extract(pos++, tuple.template get<4>(), defVal.template get<4>(), pExt); + TypeHandler::extract(pos++, tuple.template get<5>(), defVal.template get<5>(), pExt); + TypeHandler::extract(pos++, tuple.template get<6>(), defVal.template get<6>(), pExt); + TypeHandler::extract(pos++, tuple.template get<7>(), defVal.template get<7>(), pExt); + TypeHandler::extract(pos++, tuple.template get<8>(), defVal.template get<8>(), pExt); + } + +private: + TypeHandler(const TypeHandler&); + TypeHandler& operator=(const TypeHandler&); +}; + + +template +class TypeHandler > +{ +public: + typedef typename Poco::TypeWrapper >::CONSTREFTYPE TupleConstRef; + typedef typename Poco::TypeWrapper >::REFTYPE TupleRef; + + static void bind(std::size_t pos, TupleConstRef tuple, AbstractBinder* pBinder, AbstractBinder::Direction dir) + { + TypeHandler::bind(pos++, tuple.template get<0>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<1>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<2>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<3>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<4>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<5>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<6>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<7>(), pBinder, dir); + } + + static void prepare(std::size_t pos, TupleRef tuple, AbstractPreparation* pPrepare) + { + poco_assert (pPrepare != 0); + TypeHandler::prepare(pos++, tuple.template get<0>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<1>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<2>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<3>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<4>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<5>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<6>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<7>(), pPrepare); + } + + static std::size_t size() + { + return Poco::Tuple::length; + } + + static void extract(std::size_t pos, TupleRef tuple, TupleConstRef defVal, AbstractExtractor* pExt) + { + poco_assert (pExt != 0); + TypeHandler::extract(pos++, tuple.template get<0>(), defVal.template get<0>(), pExt); + TypeHandler::extract(pos++, tuple.template get<1>(), defVal.template get<1>(), pExt); + TypeHandler::extract(pos++, tuple.template get<2>(), defVal.template get<2>(), pExt); + TypeHandler::extract(pos++, tuple.template get<3>(), defVal.template get<3>(), pExt); + TypeHandler::extract(pos++, tuple.template get<4>(), defVal.template get<4>(), pExt); + TypeHandler::extract(pos++, tuple.template get<5>(), defVal.template get<5>(), pExt); + TypeHandler::extract(pos++, tuple.template get<6>(), defVal.template get<6>(), pExt); + TypeHandler::extract(pos++, tuple.template get<7>(), defVal.template get<7>(), pExt); + } + +private: + TypeHandler(const TypeHandler&); + TypeHandler& operator=(const TypeHandler&); +}; + + +template +class TypeHandler > +{ +public: + typedef typename Poco::TypeWrapper >::CONSTREFTYPE TupleConstRef; + typedef typename Poco::TypeWrapper >::REFTYPE TupleRef; + + static void bind(std::size_t pos, TupleConstRef tuple, AbstractBinder* pBinder, AbstractBinder::Direction dir) + { + poco_assert (pBinder != 0); + TypeHandler::bind(pos++, tuple.template get<0>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<1>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<2>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<3>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<4>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<5>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<6>(), pBinder, dir); + } + + static void prepare(std::size_t pos, TupleRef tuple, AbstractPreparation* pPrepare) + { + poco_assert (pPrepare != 0); + TypeHandler::prepare(pos++, tuple.template get<0>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<1>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<2>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<3>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<4>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<5>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<6>(), pPrepare); + } + + static std::size_t size() + { + return Poco::Tuple::length; + } + + static void extract(std::size_t pos, TupleRef tuple, TupleConstRef defVal, AbstractExtractor* pExt) + { + poco_assert (pExt != 0); + TypeHandler::extract(pos++, tuple.template get<0>(), defVal.template get<0>(), pExt); + TypeHandler::extract(pos++, tuple.template get<1>(), defVal.template get<1>(), pExt); + TypeHandler::extract(pos++, tuple.template get<2>(), defVal.template get<2>(), pExt); + TypeHandler::extract(pos++, tuple.template get<3>(), defVal.template get<3>(), pExt); + TypeHandler::extract(pos++, tuple.template get<4>(), defVal.template get<4>(), pExt); + TypeHandler::extract(pos++, tuple.template get<5>(), defVal.template get<5>(), pExt); + TypeHandler::extract(pos++, tuple.template get<6>(), defVal.template get<6>(), pExt); + } + +private: + TypeHandler(const TypeHandler&); + TypeHandler& operator=(const TypeHandler&); +}; + + +template +class TypeHandler > +{ +public: + typedef typename Poco::TypeWrapper >::CONSTREFTYPE TupleConstRef; + typedef typename Poco::TypeWrapper >::REFTYPE TupleRef; + + static void bind(std::size_t pos, TupleConstRef tuple, AbstractBinder* pBinder, AbstractBinder::Direction dir) + { + poco_assert (pBinder != 0); + TypeHandler::bind(pos++, tuple.template get<0>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<1>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<2>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<3>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<4>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<5>(), pBinder, dir); + } + + static void prepare(std::size_t pos, TupleRef tuple, AbstractPreparation* pPrepare) + { + poco_assert (pPrepare != 0); + TypeHandler::prepare(pos++, tuple.template get<0>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<1>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<2>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<3>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<4>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<5>(), pPrepare); + } + + static std::size_t size() + { + return Poco::Tuple::length; + } + + static void extract(std::size_t pos, TupleRef tuple, TupleConstRef defVal, AbstractExtractor* pExt) + { + poco_assert (pExt != 0); + TypeHandler::extract(pos++, tuple.template get<0>(), defVal.template get<0>(), pExt); + TypeHandler::extract(pos++, tuple.template get<1>(), defVal.template get<1>(), pExt); + TypeHandler::extract(pos++, tuple.template get<2>(), defVal.template get<2>(), pExt); + TypeHandler::extract(pos++, tuple.template get<3>(), defVal.template get<3>(), pExt); + TypeHandler::extract(pos++, tuple.template get<4>(), defVal.template get<4>(), pExt); + TypeHandler::extract(pos++, tuple.template get<5>(), defVal.template get<5>(), pExt); + } + +private: + TypeHandler(const TypeHandler&); + TypeHandler& operator=(const TypeHandler&); +}; + + +template +class TypeHandler > +{ +public: + typedef typename Poco::TypeWrapper >::CONSTREFTYPE TupleConstRef; + typedef typename Poco::TypeWrapper >::REFTYPE TupleRef; + + static void bind(std::size_t pos, TupleConstRef tuple, AbstractBinder* pBinder, AbstractBinder::Direction dir) + { + poco_assert (pBinder != 0); + TypeHandler::bind(pos++, tuple.template get<0>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<1>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<2>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<3>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<4>(), pBinder, dir); + } + + static void prepare(std::size_t pos, TupleRef tuple, AbstractPreparation* pPrepare) + { + poco_assert (pPrepare != 0); + TypeHandler::prepare(pos++, tuple.template get<0>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<1>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<2>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<3>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<4>(), pPrepare); + } + + static std::size_t size() + { + return Poco::Tuple::length; + } + + static void extract(std::size_t pos, TupleRef tuple, TupleConstRef defVal, AbstractExtractor* pExt) + { + poco_assert (pExt != 0); + TypeHandler::extract(pos++, tuple.template get<0>(), defVal.template get<0>(), pExt); + TypeHandler::extract(pos++, tuple.template get<1>(), defVal.template get<1>(), pExt); + TypeHandler::extract(pos++, tuple.template get<2>(), defVal.template get<2>(), pExt); + TypeHandler::extract(pos++, tuple.template get<3>(), defVal.template get<3>(), pExt); + TypeHandler::extract(pos++, tuple.template get<4>(), defVal.template get<4>(), pExt); + } + +private: + TypeHandler(const TypeHandler&); + TypeHandler& operator=(const TypeHandler&); +}; + + +template +class TypeHandler > +{ +public: + typedef typename Poco::TypeWrapper >::CONSTREFTYPE TupleConstRef; + typedef typename Poco::TypeWrapper >::REFTYPE TupleRef; + + static void bind(std::size_t pos, TupleConstRef tuple, AbstractBinder* pBinder, AbstractBinder::Direction dir) + { + poco_assert (pBinder != 0); + TypeHandler::bind(pos++, tuple.template get<0>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<1>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<2>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<3>(), pBinder, dir); + } + + static void prepare(std::size_t pos, TupleRef tuple, AbstractPreparation* pPrepare) + { + poco_assert (pPrepare != 0); + TypeHandler::prepare(pos++, tuple.template get<0>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<1>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<2>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<3>(), pPrepare); + } + + static std::size_t size() + { + return Poco::Tuple::length; + } + + static void extract(std::size_t pos, TupleRef tuple, TupleConstRef defVal, AbstractExtractor* pExt) + { + poco_assert (pExt != 0); + TypeHandler::extract(pos++, tuple.template get<0>(), defVal.template get<0>(), pExt); + TypeHandler::extract(pos++, tuple.template get<1>(), defVal.template get<1>(), pExt); + TypeHandler::extract(pos++, tuple.template get<2>(), defVal.template get<2>(), pExt); + TypeHandler::extract(pos++, tuple.template get<3>(), defVal.template get<3>(), pExt); + } + +private: + TypeHandler(const TypeHandler&); + TypeHandler& operator=(const TypeHandler&); +}; + + +template + class TypeHandler > +{ +public: + typedef typename Poco::TypeWrapper >::CONSTREFTYPE TupleConstRef; + typedef typename Poco::TypeWrapper >::REFTYPE TupleRef; + + static void bind(std::size_t pos, TupleConstRef tuple, AbstractBinder* pBinder, AbstractBinder::Direction dir) + { + poco_assert (pBinder != 0); + TypeHandler::bind(pos++, tuple.template get<0>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<1>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<2>(), pBinder, dir); + } + + static void prepare(std::size_t pos, TupleRef tuple, AbstractPreparation* pPrepare) + { + poco_assert (pPrepare != 0); + TypeHandler::prepare(pos++, tuple.template get<0>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<1>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<2>(), pPrepare); + } + + static std::size_t size() + { + return Poco::Tuple::length; + } + + static void extract(std::size_t pos, TupleRef tuple, TupleConstRef defVal, AbstractExtractor* pExt) + { + poco_assert (pExt != 0); + TypeHandler::extract(pos++, tuple.template get<0>(), defVal.template get<0>(), pExt); + TypeHandler::extract(pos++, tuple.template get<1>(), defVal.template get<1>(), pExt); + TypeHandler::extract(pos++, tuple.template get<2>(), defVal.template get<2>(), pExt); + } + +private: + TypeHandler(const TypeHandler&); + TypeHandler& operator=(const TypeHandler&); +}; + + +template +class TypeHandler > +{ +public: + typedef typename Poco::TypeWrapper >::CONSTREFTYPE TupleConstRef; + typedef typename Poco::TypeWrapper >::REFTYPE TupleRef; + + static void bind(std::size_t pos, TupleConstRef tuple, AbstractBinder* pBinder, AbstractBinder::Direction dir) + { + poco_assert (pBinder != 0); + TypeHandler::bind(pos++, tuple.template get<0>(), pBinder, dir); + TypeHandler::bind(pos++, tuple.template get<1>(), pBinder, dir); + } + + static void prepare(std::size_t pos, TupleRef tuple, AbstractPreparation* pPrepare) + { + poco_assert (pPrepare != 0); + TypeHandler::prepare(pos++, tuple.template get<0>(), pPrepare); + TypeHandler::prepare(pos++, tuple.template get<1>(), pPrepare); + } + + static std::size_t size() + { + return Poco::Tuple::length; + } + + static void extract(std::size_t pos, TupleRef tuple, TupleConstRef defVal, AbstractExtractor* pExt) + { + poco_assert (pExt != 0); + TypeHandler::extract(pos++, tuple.template get<0>(), defVal.template get<0>(), pExt); + TypeHandler::extract(pos++, tuple.template get<1>(), defVal.template get<1>(), pExt); + } + +private: + TypeHandler(const TypeHandler&); + TypeHandler& operator=(const TypeHandler&); +}; + + +template +class TypeHandler > +{ +public: + typedef typename Poco::TypeWrapper >::CONSTREFTYPE TupleConstRef; + typedef typename Poco::TypeWrapper >::REFTYPE TupleRef; + + static void bind(std::size_t pos, TupleConstRef tuple, AbstractBinder* pBinder, AbstractBinder::Direction dir) + { + poco_assert (pBinder != 0); + TypeHandler::bind(pos++, tuple.template get<0>(), pBinder, dir); + } + + static void prepare(std::size_t pos, TupleRef tuple, AbstractPreparation* pPrepare) + { + poco_assert (pPrepare != 0); + TypeHandler::prepare(pos++, tuple.template get<0>(), pPrepare); + } + + static std::size_t size() + { + return Poco::Tuple::length; + } + + static void extract(std::size_t pos, TupleRef tuple, TupleConstRef defVal, + AbstractExtractor* pExt) + { + poco_assert (pExt != 0); + TypeHandler::extract(pos++, tuple.template get<0>(), defVal.template get<0>(), pExt); + } + +private: + TypeHandler(const TypeHandler&); + TypeHandler& operator=(const TypeHandler&); +}; + +} } // namespace Poco::Data + + +#endif // Data_TypeHandler_INCLUDED