Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
// auto_prg.h
//
// Same as auto_ptr but for a
#pragma once
#include <xstddef>
template<class _Ty> class auto_prg { public: typedef _Ty element_type;
explicit auto_prg(_Ty *_P = 0) _THROW0() : _Owns(_P != 0), _Ptr(_P) {} auto_prg(const auto_prg<_Ty>& _Y) _THROW0() : _Owns(_Y._Owns), _Ptr(_Y.release()) {} auto_prg<_Ty>& operator=(const auto_prg<_Ty>& _Y) _THROW0() {if (_Ptr != _Y.get()) {if (_Owns) delete [] _Ptr; _Owns = _Y._Owns; _Ptr = _Y.release(); } else if (_Y._Owns) _Owns = true; return (*this); } auto_prg<_Ty>& operator=(_Ty* _Y) _THROW0() { {if (_Owns) delete [] _Ptr; _Owns = _Y != 0; _Ptr = _Y; } return (*this); }
~auto_prg() {if (_Owns) delete [] _Ptr; } _Ty** operator&() _THROW0() { return &_Ptr; } operator _Ty* () const { return _Ptr; } _Ty& operator*() const _THROW0() {return (*get()); } _Ty *operator->() const _THROW0() {return (get()); } _Ty& operator[] (int ndx) const _THROW0() {return *(get() + ndx); } _Ty *get() const _THROW0() {return (_Ptr); } _Ty *release() const _THROW0() {((auto_prg<_Ty> *)this)->_Owns = false; return (_Ptr); } bool Ownership(bool fOwns) { return _Owns = fOwns; } protected: bool _Owns; _Ty *_Ptr; };
template<class _Ty> class pointer { public: typedef _Ty element_type;
explicit pointer(_Ty *_P = 0) _THROW0() : _Owns(_P != 0), _Ptr(_P) {} pointer(const pointer<_Ty>& _Y) _THROW0() : _Owns(_Y._Owns), _Ptr(_Y.release()) {} pointer<_Ty>& operator=(const pointer<_Ty>& _Y) _THROW0() {if (_Ptr != _Y.get()) {if (_Owns) delete _Ptr; _Owns = _Y._Owns; _Ptr = _Y.release(); } else if (_Y._Owns) _Owns = true; return (*this); } pointer<_Ty>& operator=(_Ty* _Y) _THROW0() { {if (_Owns) delete _Ptr; _Owns = _Y != 0; _Ptr = _Y; } return (*this); }
~pointer() {if (_Owns) delete _Ptr; } _Ty** operator&() _THROW0() { return &_Ptr; } operator _Ty* () const { return _Ptr; } _Ty& operator*() const _THROW0() {return (*get()); } _Ty *operator->() const _THROW0() {return (get()); } _Ty& operator[] (int ndx) const _THROW0() {return *(get() + ndx); } _Ty *get() const _THROW0() {return (_Ptr); } _Ty *release() const _THROW0() {((pointer<_Ty> *)this)->_Owns = false; return (_Ptr); } bool Ownership(bool fOwns) { return _Owns = fOwns; } protected: bool _Owns; _Ty *_Ptr; };
|