diff --git a/mrw/auto.hpp b/mrw/auto.hpp
index 9055993..aab3adb 100644
--- a/mrw/auto.hpp
+++ b/mrw/auto.hpp
@@ -9,6 +9,9 @@
@license LGPL, see file COPYING
$Log$
+ Revision 1.6 2004/10/11 16:48:29 marc
+ better comment and operators -> and * for AutoPtr
+
Revision 1.5 2004/10/11 16:05:02 marc
new AutoPtr
@@ -75,8 +78,7 @@ namespace mrw {
typedef mrw::AutoResource Free;
};
@endcode
-
- @param RESOURCE_TYPE type of the resorce to manage
+ @param RESOURCE_TYPE type of the resource to manage
@param FUNCTION_PTR type of the function that frees the resource
@param FREE_FUNCTION the function that frees the resource
@param INITIAL_VALUE_TYPE type of the initial value
@@ -109,7 +111,7 @@ namespace mrw {
AutoResource& operator=(RESOURCE_TYPE res) throw(std::bad_exception) {
return reset(res);
}
- /// @brief Takeover ownership from another AutoResorce.
+ /// @brief Takeover ownership from another AutoResource.
/// Calls @c reset() from @c this and @c release() from @c other.
AutoResource& operator=(AutoResource& other) throw(std::bad_exception) {
return reset(other.release());
@@ -118,6 +120,11 @@ namespace mrw {
operator const RESOURCE_TYPE&() const throw(std::bad_exception) {
return _res;
}
+ /// @brief find out, if a value is set
+ /// @return @c true: resource is valid
+ operator bool() const throw(std::bad_exception) {
+ return _res!=INITIAL_VALUE;
+ }
/// @brief get the resetted resource for resetting it.
/// Calls @c reset and returns the cleaned resource.
/// The intention is, that you can safely assign it a new value
@@ -126,18 +133,13 @@ namespace mrw {
reset();
return _res;
}
- /// @brief find out, if a value is set
- /// @return @c true: resource is valid
- operator bool() const throw(std::bad_exception) {
- return _res!=INITIAL_VALUE;
- }
/// @brief Give away ownership of the resource.
/// @return old resource
RESOURCE_TYPE release() throw(std::bad_exception) {
RESOURCE_TYPE res(_res); _res=INITIAL_VALUE;
return res;
}
- /// @brief Assign a new resorce.
+ /// @brief Assign a new resource.
/// The old resource of @c this is freed if necessary.
AutoResource& reset(RESOURCE_TYPE res = INITIAL_VALUE)
throw(std::bad_exception) {
@@ -149,6 +151,18 @@ namespace mrw {
RESOURCE_TYPE _res; ///< the resource to be managed
};
+ /** @brief Automatically deletes a pointer when destructed.
+ @pre #include
+
+ mrw::AutoPtr is a replacement for std::auto_ptr. The problem with
+ standard std::auto_ptr is, that it cannot be stored in a std::map.
+
+ @warning Use this class with prudence! Should I ever find out,
+ how to work around the std::auto_ptr / std::map problem,
+ then this class may become deprecated.
+
+ @param T type of the pointer to manage
+ */
template
class AutoPtr {
public:
@@ -170,7 +184,7 @@ namespace mrw {
AutoPtr& operator=(T* res) throw(std::bad_exception) {
return reset(res);
}
- /// @brief Takeover ownership from another AutoResorce.
+ /// @brief Takeover ownership from another AutoResource.
/// Calls @c reset() from @c this and @c release() from @c other.
AutoPtr& operator=(AutoPtr& other) throw(std::bad_exception) {
return reset(other.release());
@@ -179,6 +193,15 @@ namespace mrw {
operator T* const() const throw(std::bad_exception) {
return _res;
}
+ /// @brief find out, if a value is set
+ /// @return @c true: resource is valid
+ operator bool() const throw(std::bad_exception) {
+ return _res!=0;
+ }
+ /// @brief Access the AutoPtr like a normal pointer.
+ T*const operator->() {return _res;}
+ /// @brief Dereference the AutoPtr like a normal pointer.
+ T& operator*() {return *_res;}
/// @brief get the resetted resource for resetting it.
/// Calls @c reset and returns the cleaned resource.
/// The intention is, that you can safely assign it a new value
@@ -187,18 +210,13 @@ namespace mrw {
reset();
return _res;
}
- /// @brief find out, if a value is set
- /// @return @c true: resource is valid
- operator bool() const throw(std::bad_exception) {
- return _res!=0;
- }
/// @brief Give away ownership of the resource.
/// @return old resource
T* release() throw(std::bad_exception) {
T* res(_res); _res=0;
return res;
}
- /// @brief Assign a new resorce.
+ /// @brief Assign a new resource.
/// The old resource of @c this is freed if necessary.
AutoPtr& reset(T* res = 0)
throw(std::bad_exception) {
@@ -220,7 +238,7 @@ namespace mrw {
*/
typedef mrw::AutoResource AutoFile;
- /** @brief Resorce handle for @c mmap.
+ /** @brief Resource handle for @c mmap.
It integrates pointer and size of a memory mapped file similar
to a @c std::pair.