blob: da88830ecff32f6242b8273dc3419a3dcb56f459 [file] [log] [blame]
/*
* 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 <cstddef>
#include <map>
#include <boost/log/core/record_view.hpp>
#include <boost/log/attributes/attribute_name.hpp>
#include <boost/log/attributes/attribute_value_set.hpp>
#include <boost/log/sinks/sink.hpp>
#include <boost/log/expressions/filter.hpp>
//! 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_