… | |
… | |
4 | template<typename T> static inline T min (T a, long b) { return a < b ? a : b; } |
4 | template<typename T> static inline T min (T a, long b) { return a < b ? a : b; } |
5 | template<typename T> static inline T max (T a, long b) { return a > b ? a : b; } |
5 | template<typename T> static inline T max (T a, long b) { return a > b ? a : b; } |
6 | |
6 | |
7 | #include <cstring> |
7 | #include <cstring> |
8 | #include "simplevec.h" |
8 | #include "simplevec.h" |
|
|
9 | |
|
|
10 | #include <cstdio> |
9 | |
11 | |
10 | #if 0 |
12 | #if 0 |
11 | template<typename T> |
13 | template<typename T> |
12 | struct rxvt_vec : simplevec<void *> { |
14 | struct rxvt_vec : simplevec<void *> { |
13 | typedef T *iterator; |
15 | typedef T *iterator; |
… | |
… | |
30 | ++first; |
32 | ++first; |
31 | |
33 | |
32 | return first; |
34 | return first; |
33 | } |
35 | } |
34 | |
36 | |
|
|
37 | template<typename T> |
|
|
38 | struct auto_ptr { |
|
|
39 | T *p; |
|
|
40 | |
|
|
41 | auto_ptr() : p(0) { } |
|
|
42 | auto_ptr(T *a) : p(a) { } |
|
|
43 | |
|
|
44 | auto_ptr(auto_ptr &a) |
|
|
45 | { |
|
|
46 | p = a.p; |
|
|
47 | a.p = 0; |
|
|
48 | } |
|
|
49 | |
|
|
50 | template<typename A> |
|
|
51 | auto_ptr(auto_ptr<A> &a) |
|
|
52 | { |
|
|
53 | p = a.p; |
|
|
54 | a.p = 0; |
|
|
55 | } |
|
|
56 | |
|
|
57 | ~auto_ptr() |
|
|
58 | { |
|
|
59 | delete p; |
|
|
60 | } |
|
|
61 | |
|
|
62 | // void because it makes sense in our context |
|
|
63 | void operator =(T *a) |
|
|
64 | { |
|
|
65 | delete p; |
|
|
66 | p = a; |
|
|
67 | } |
|
|
68 | |
|
|
69 | void operator =(auto_ptr &a) |
|
|
70 | { |
|
|
71 | *this = a.p; |
|
|
72 | a.p = 0; |
|
|
73 | } |
|
|
74 | |
|
|
75 | template<typename A> |
|
|
76 | void operator =(auto_ptr<A> &a) |
|
|
77 | { |
|
|
78 | *this = a.p; |
|
|
79 | a.p = 0; |
|
|
80 | } |
|
|
81 | |
|
|
82 | operator T *() const { return p; } |
|
|
83 | |
|
|
84 | T *operator ->() const { return p; } |
|
|
85 | T &operator *() const { return *p; } |
|
|
86 | |
|
|
87 | T *get () |
|
|
88 | { |
|
|
89 | T *r = p; |
|
|
90 | p = 0; |
|
|
91 | return r; |
|
|
92 | } |
|
|
93 | }; |
|
|
94 | |
|
|
95 | typedef auto_ptr<char> auto_str; |
|
|
96 | |
|
|
97 | struct stringvec : simplevec<char *> |
|
|
98 | { |
|
|
99 | ~stringvec () |
|
|
100 | { |
|
|
101 | for (char **c = begin(); c != end(); c++) |
|
|
102 | delete [] *c; |
|
|
103 | } |
|
|
104 | }; |
|
|
105 | |
35 | #endif |
106 | #endif |
|
|
107 | |