ifndef Rice__Builtin_Object_defn__hpp_ define Rice__Builtin_Object_defn__hpp_
include “Object_defn.hpp” include “detail/ruby.hpp”
namespace Rice {
//! A smartpointer-like wrapper for Ruby builtin objects.
! A builtin object is one of Ruby's internal types, e.g. RArray or RString. Every builtin type structure has a corresponding integer type number (e.g T_ARRAY for RArray or T_STRING for RString). This class is a wrapper for those types of objects, primarily useful as a base class for other wrapper classes like Array and Hash.
template<int Builtin_Type> class Builtin_Object
: public Object
{ public:
//! Wrap an already allocated Ruby object.
/*! Checks to see if the object is an object of type Builtin_Type; a
C++ exception is thrown if this is not the case.
\param value the object to be wrapped.
/
Builtin_Object(Object value);
//! Make a copy of a Builtin_Object
/*! \param other the Builtin_Object to be copied.
/
Builtin_Object(Builtin_Object const & other);
RObject & operator*() const { return *obj_; } //!< Return a reference to obj_
RObject * operator->() const { return obj_; } //!< Return a pointer to obj_
RObject * get() const { return obj_; } //!< Return a pointer to obj_
//! Swap with another builtin object of the same type
/*! \param ref the object with which to swap.
/
void swap(Builtin_Object<Builtin_Type> & ref);
private:
RObject * obj_;
};
} // namespace Rice
endif // Rice__Builtin_Object_defn__hpp_