| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 | /* *          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   constant.hpp * \author Andrey Semashev * \date   15.04.2007 * * The header contains implementation of a constant attribute. */#ifndef BOOST_LOG_ATTRIBUTES_CONSTANT_HPP_INCLUDED_#define BOOST_LOG_ATTRIBUTES_CONSTANT_HPP_INCLUDED_#include <boost/move/core.hpp>#include <boost/move/utility_core.hpp>#include <boost/type_traits/remove_reference.hpp>#include <boost/log/detail/config.hpp>#include <boost/log/detail/embedded_string_type.hpp>#include <boost/log/attributes/attribute.hpp>#include <boost/log/attributes/attribute_cast.hpp>#include <boost/log/attributes/attribute_value_impl.hpp>#include <boost/log/detail/header.hpp>#ifdef BOOST_HAS_PRAGMA_ONCE#pragma once#endifnamespace boost {BOOST_LOG_OPEN_NAMESPACEnamespace attributes {/*! * \brief A class of an attribute that holds a single constant value * * The constant is a simplest and one of the most frequently used types of attributes. * It stores a constant value, which it eventually returns as its value each time * requested. */template< typename T >class constant :    public attribute{public:    //! Attribute value type    typedef T value_type;protected:    //! Factory implementation    class BOOST_SYMBOL_VISIBLE impl :        public attribute_value_impl< value_type >    {        //! Base type        typedef attribute_value_impl< value_type > base_type;    public:        /*!         * Constructor with the stored value initialization         */        explicit impl(value_type const& value) : base_type(value) {}        /*!         * Constructor with the stored value initialization         */        explicit impl(BOOST_RV_REF(value_type) value) : base_type(boost::move(value)) {}    };public:    /*!     * Constructor with the stored value initialization     */    explicit constant(value_type const& value) : attribute(new impl(value)) {}    /*!     * Constructor with the stored value initialization     */    explicit constant(BOOST_RV_REF(value_type) value) : attribute(new impl(boost::move(value))) {}    /*!     * Constructor for casting support     */    explicit constant(cast_source const& source) : attribute(source.as< impl >())    {    }    /*!     * \return Reference to the contained value.     */    value_type const& get() const    {        return static_cast< impl* >(this->get_impl())->get();    }};/*! * The function constructs a \c constant attribute containing the provided value. * The function automatically converts C string arguments to \c std::basic_string objects. */template< typename T >inline constant<    typename boost::log::aux::make_embedded_string_type<        typename remove_reference< T >::type    >::type> make_constant(BOOST_FWD_REF(T) val){    typedef typename boost::log::aux::make_embedded_string_type<        typename remove_reference< T >::type    >::type value_type;    return constant< value_type >(boost::forward< T >(val));}} // namespace attributesBOOST_LOG_CLOSE_NAMESPACE // namespace log} // namespace boost#include <boost/log/detail/footer.hpp>#endif // BOOST_LOG_ATTRIBUTES_CONSTANT_HPP_INCLUDED_
 |