/* * Copyright Andrey Semashev 2007 - 2015. * Distributed under the Boost Software License, Version 1.0. * (See accompanying file LICENSE_1_0.txt or copy at * http://www.boost.org/LICENSE_1_0.txt) */ /*! * \file test_sink.hpp * \author Andrey Semashev * \date 18.03.2009 * * \brief This header contains a test sink frontend that is used through various tests. */ #ifndef BOOST_LOG_TESTS_TEST_SINK_HPP_INCLUDED_ #define BOOST_LOG_TESTS_TEST_SINK_HPP_INCLUDED_ #include #include #include #include #include #include #include //! A sink implementation for testing purpose struct test_sink : public boost::log::sinks::sink { public: typedef boost::log::attribute_value_set attribute_values; typedef boost::log::record_view record_type; typedef boost::log::filter filter_type; typedef attribute_values::key_type key_type; struct key_type_order { typedef bool result_type; result_type operator() (key_type const& left, key_type const& right) const { return left.id() < right.id(); } }; typedef std::map< key_type, std::size_t, key_type_order > attr_counters_map; public: filter_type m_Filter; attr_counters_map m_Consumed; std::size_t m_RecordCounter; public: test_sink() : boost::log::sinks::sink(false), m_RecordCounter(0) {} void set_filter(filter_type const& f) { m_Filter = f; } void reset_filter() { m_Filter.reset(); } bool will_consume(attribute_values const& attributes) { return m_Filter(attributes); } void consume(record_type const& record) { ++m_RecordCounter; attribute_values::const_iterator it = record.attribute_values().begin(), end = record.attribute_values().end(); for (; it != end; ++it) ++m_Consumed[it->first]; } void flush() { } void clear() { m_RecordCounter = 0; m_Consumed.clear(); } }; #endif // BOOST_LOG_TESTS_TEST_SINK_HPP_INCLUDED_