// Copyright Daniel Wallin 2008. Use, modification and distribution is
// subject to 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 LUABIND_PROPERTY_081020_HPP
# define LUABIND_PROPERTY_081020_HPP

namespace luabind
{
namespace detail
{

template < class Class, class T, class Result = T >
struct access_member_ptr
{
    access_member_ptr( T Class::* mem_ptr )
            : mem_ptr( mem_ptr )
    {}

    Result operator()( Class const& x ) const
    {
        return const_cast<Class&>( x ).*mem_ptr;
    }

    void operator()( Class& x, T const& value ) const
    {
        x.*mem_ptr = value;
    }

    T Class::* mem_ptr;
};

}
} // namespace luabind::detail

#endif // LUABIND_PROPERTY_081020_HPP

