--- rxvt-unicode/src/rxvtvec.h 2003/11/24 17:28:08 1.1 +++ rxvt-unicode/src/rxvtvec.h 2003/11/27 10:12:10 1.4 @@ -7,6 +7,8 @@ #include #include "simplevec.h" +#include + #if 0 template struct rxvt_vec : simplevec { @@ -32,4 +34,74 @@ return first; } +template +struct auto_ptr { + T *p; + + auto_ptr() : p(0) { } + auto_ptr(T *a) : p(a) { } + + auto_ptr(auto_ptr &a) + { + p = a.p; + a.p = 0; + } + + template + auto_ptr(auto_ptr &a) + { + p = a.p; + a.p = 0; + } + + ~auto_ptr() + { + delete p; + } + + // void because it makes sense in our context + void operator =(T *a) + { + delete p; + p = a; + } + + void operator =(auto_ptr &a) + { + *this = a.p; + a.p = 0; + } + + template + void operator =(auto_ptr &a) + { + *this = a.p; + a.p = 0; + } + + operator T *() const { return p; } + + T *operator ->() const { return p; } + T &operator *() const { return *p; } + + T *get () + { + T *r = p; + p = 0; + return r; + } +}; + +typedef auto_ptr auto_str; + +struct stringvec : simplevec +{ + ~stringvec () + { + for (char **c = begin(); c != end(); c++) + delete [] *c; + } +}; + #endif +