// // Preparation.h // // Library: Data // Package: DataCore // Module: Preparation // // Definition of the Preparation class. // // Copyright (c) 2006, Applied Informatics Software Engineering GmbH. // and Contributors. // // SPDX-License-Identifier: BSL-1.0 // #ifndef Data_Preparation_INCLUDED #define Data_Preparation_INCLUDED #include "Poco/Data/Data.h" #include "Poco/Data/AbstractPreparation.h" #include "Poco/Data/TypeHandler.h" #include #include namespace Poco { namespace Data { template class Preparation: public AbstractPreparation /// Class for calling the appropriate AbstractPreparator method. { public: Preparation(AbstractPreparator::Ptr& pPreparator, std::size_t pos, T& val): AbstractPreparation(pPreparator), _pos(pos), _val(val) /// Creates the Preparation. { } ~Preparation() /// Destroys the Preparation. { } void prepare() /// Prepares data. { auto pPrep = preparation(); TypeHandler::prepare(_pos, _val, pPrep); } private: std::size_t _pos; T& _val; }; template class Preparation>: public AbstractPreparation /// Preparation specialization for std::vector. /// This specialization is needed for bulk operations to enforce /// the whole vector preparation, rather than only individual contained values. { public: Preparation(AbstractPreparator::Ptr pPreparator, std::size_t pos, std::vector& val = std::vector()): AbstractPreparation(pPreparator), _pos(pos), _val(val) /// Creates the Preparation. { } ~Preparation() /// Destroys the Preparation. { } void prepare() /// Prepares data. { TypeHandler>::prepare(_pos, _val, preparation()); } private: std::size_t _pos; std::vector& _val; }; template class Preparation>: public AbstractPreparation /// Preparation specialization for std::deque. /// This specialization is needed for bulk operations to enforce /// the whole deque preparation, rather than only individual contained values. { public: Preparation(AbstractPreparator::Ptr pPreparator, std::size_t pos, std::deque& val = std::deque()): AbstractPreparation(pPreparator), _pos(pos), _val(val) /// Creates the Preparation. { } ~Preparation() /// Destroys the Preparation. { } void prepare() /// Prepares data. { TypeHandler>::prepare(_pos, _val, preparation()); } private: std::size_t _pos; std::deque& _val; }; template class Preparation>: public AbstractPreparation /// Preparation specialization for std::list. /// This specialization is needed for bulk operations to enforce /// the whole list preparation, rather than only individual contained values. { public: Preparation(AbstractPreparator::Ptr pPreparator, std::size_t pos, std::list& val = std::list()): AbstractPreparation(pPreparator), _pos(pos), _val(val) /// Creates the Preparation. { } ~Preparation() /// Destroys the Preparation. { } void prepare() /// Prepares data. { TypeHandler>::prepare(_pos, _val, preparation()); } private: std::size_t _pos; std::list& _val; }; } } // namespace Poco::Data #endif // Data_Preparation_INCLUDED