///////////////////////////////////////////////////////////////////////////////
// save_restore.hpp
//
//  Copyright 2008 Eric Niebler. 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)

#ifndef BOOST_XPRESSIVE_DETAIL_UTILITY_SAVE_RESTORE_HPP_EAN_10_04_2005
#define BOOST_XPRESSIVE_DETAIL_UTILITY_SAVE_RESTORE_HPP_EAN_10_04_2005

// MS compatible compilers support #pragma once
#if defined(_MSC_VER) && (_MSC_VER >= 1020)
# pragma once
#endif

#include <boost/noncopyable.hpp>

namespace boost { namespace xpressive { namespace detail
{

    template<typename T>
    struct save_restore
      : private noncopyable
    {
        explicit save_restore(T &t)
          : ref(t)
          , val(t)
        {
        }

        save_restore(T &t, T const &n)
          : ref(t)
          , val(t)
        {
            this->ref = n;
        }

        ~save_restore()
        {
            this->ref = this->val;
        }

        void restore()
        {
            this->ref = this->val;
        }

    private:
        T &ref;
        T const val;
    };

}}}

#endif
