boost/test/detail/class_properties.hpp
// (C) Copyright Gennadiy Rozental 2001-2003.
// Use, modification, and distribution are 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)
// See http://www.boost.org/libs/test for the library home page.
//
// File : $RCSfile: class_properties.hpp,v $
//
// Version : $Revision: 1.13 $
//
// Description : simple facility that mimmic notion of read-only read-write
// properties in C++ classes. Original idea by Henrik Ravn.
// ***************************************************************************
#ifndef BOOST_TEST_CLASS_PROPERTIES_HPP
#define BOOST_TEST_CLASS_PROPERTIES_HPP
// BOOST
#include <boost/preprocessor/repetition/repeat.hpp>
#include <boost/preprocessor/array/elem.hpp>
// ************************************************************************** //
// ************** readonly_property ************** //
// ************************************************************************** //
#define DECLARE_FRIEND( z, count, array ) friend class BOOST_PP_ARRAY_ELEM(count, array);
#define BOOST_READONLY_PROPERTY( property_type, friends_num, friends ) \
class BOOST_JOIN( readonly_property, __LINE__ ) \
{ \
BOOST_PP_REPEAT( friends_num, DECLARE_FRIEND, (friends_num, friends) ) \
public: \
explicit BOOST_JOIN( readonly_property, __LINE__ )( property_type const& init_value ) : value( init_value ) {} \
\
operator property_type const &() const { return value; } \
property_type const& get() const { return value; } \
private: \
property_type value; \
}
// ************************************************************************** //
// ************** readwrite_property ************** //
// ************************************************************************** //
#define BOOST_READWRITE_PROPERTY( property_type ) \
class BOOST_JOIN( readwrite_property, __LINE__ ) \
{ \
public: \
BOOST_JOIN( readwrite_property, __LINE__ )() {} \
explicit BOOST_JOIN( readwrite_property, __LINE__ )( property_type const& init_value ) : value( init_value ) {}\
\
operator property_type const &() const { return value; } \
property_type const& get() const { return value; } \
void set( property_type const& v ) { value = v; } \
private: \
property_type value; \
}
// ***************************************************************************
// Revision History :
//
// $Log: class_properties.hpp,v $
// Revision 1.13 2003/12/01 00:41:56 rogeeff
// prerelease cleaning
//
// ***************************************************************************
#endif // BOOST_TEST_CLASS_PROPERTIES_HPP