diff options
Diffstat (limited to 'cppe/include/IceE/ScopedArray.h')
-rw-r--r-- | cppe/include/IceE/ScopedArray.h | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/cppe/include/IceE/ScopedArray.h b/cppe/include/IceE/ScopedArray.h new file mode 100644 index 00000000000..7d41ab6238c --- /dev/null +++ b/cppe/include/IceE/ScopedArray.h @@ -0,0 +1,72 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2006 ZeroC, Inc. All rights reserved. +// +// This copy of Ice is licensed to you under the terms described in the +// ICE_LICENSE file included in this distribution. +// +// ********************************************************************** + +#ifndef ICEE_SCOPED_ARRAY_H +#define ICEE_SCOPED_ARRAY_H + +#include <IceE/Config.h> + +namespace IceUtil +{ + +template<typename T> +class ScopedArray : private noncopyable +{ +public: + + explicit ScopedArray(T* ptr = 0) : + _ptr(ptr) + { + } + + ~ScopedArray() + { + if(_ptr != 0) + { + delete[] _ptr; + } + } + + void reset(T* ptr = 0) + { + assert(ptr == 0 || ptr != _ptr); + if(_ptr != 0) + { + delete[] _ptr; + } + _ptr = ptr; + } + + T& operator[](size_t i) const + { + assert(_ptr != 0); + assert(i >= 0); + return _ptr[i]; + } + + T* get() const + { + return _ptr; + } + + void swap(ScopedArray& a) + { + T* tmp = a._ptr; + a._ptr = _ptr; + _ptr = tmp; + } + +private: + + T* _ptr; +}; + +} // End of namespace IceUtil + +#endif |