ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/rxvtutil.h
(Generate patch)

Comparing rxvt-unicode/src/rxvtutil.h (file contents):
Revision 1.50 by sf-exg, Mon Jan 23 14:29:24 2012 UTC vs.
Revision 1.60 by sf-exg, Tue Oct 28 09:05:33 2014 UTC

1#ifndef RXVT_UTIL_H 1#ifndef RXVT_UTIL_H
2#define RXVT_UTIL_H 2#define RXVT_UTIL_H
3 3
4#include <new>
4#include <stdlib.h> 5#include <stdlib.h>
5#include <string.h> 6#include <string.h>
6#include "ecb.h" 7#include "ecb.h"
7#include "estl.h" 8#include "estl.h"
9
10#include "emman.h"
8 11
9// increases code size unless -fno-enforce-eh-specs 12// increases code size unless -fno-enforce-eh-specs
10#if __GNUC__ 13#if __GNUC__
11# define NOTHROW 14# define NOTHROW
12# define THROW(x) 15# define THROW(x)
14# define NOTHROW throw() 17# define NOTHROW throw()
15# define THROW(x) throw x 18# define THROW(x) throw x
16#endif 19#endif
17 20
18// various utility functions 21// various utility functions
19template<typename T, typename U> static inline void min_it (T &a, U b) { a = a < (T)b ? a : (T)b; } 22template<typename T, typename U> static inline void min_it (T &a, U b) { a = a < (T)b ? a : (T)b; }
20template<typename T, typename U> static inline void max_it (T &a, U b) { a = a > (T)b ? a : (T)b; } 23template<typename T, typename U> static inline void max_it (T &a, U b) { a = a > (T)b ? a : (T)b; }
21 24
22template<typename T, typename U, typename V> static inline T clamp (T v, U a, V b) { return v < (T)a ? a : v >(T)b ? b : v; } 25template<typename T, typename U, typename V> static inline T clamp (T v, U a, V b) { return v < (T)a ? a : v >(T)b ? b : v; }
23template<typename T, typename U, typename V> static inline void clamp_it (T &v, U a, V b) { v = v < (T)a ? a : v >(T)b ? b : v; } 26template<typename T, typename U, typename V> static inline void clamp_it (T &v, U a, V b) { v = v < (T)a ? a : v >(T)b ? b : v; }
24 27
25template<typename T> static inline T squared_diff (T a, T b) { return (a-b)*(a-b); } 28template<typename T> static inline T squared_diff (T a, T b) { return (a - b) * (a - b); }
26 29
27// linear interpolation 30// linear interpolation
28template<typename T, typename U, typename P> 31template<typename T, typename U, typename P>
29static inline 32static inline T
30T lerp (T a, U b, P p) 33lerp (T a, U b, P p)
31{ 34{
32 return (long(a) * long(100 - p) + long(b) * long(p) + 50) / 100; 35 return (long(a) * long(100 - p) + long(b) * long(p) + 50) / 100;
33} 36}
34 37
35// return a very temporary (and never deallocated) buffer. keep small. 38// return a very temporary (and never deallocated) buffer. keep small.
58{ 61{
59 void *operator new (size_t s); 62 void *operator new (size_t s);
60 void operator delete (void *p, size_t s); 63 void operator delete (void *p, size_t s);
61}; 64};
62 65
66// alas new/delete cannot be specified as inline in C++11 (see 17.6.4.6)
67void *operator new (size_t s) throw (std::bad_alloc);
68void operator delete (void *p) throw ();
69
63struct stringvec : simplevec<char *> 70struct stringvec : simplevec<char *>
64{ 71{
65 ~stringvec () 72 ~stringvec ()
66 { 73 {
67 for (char **c = begin (); c != end (); c++) 74 for (char **c = begin (); c != end (); c++)
89template<typename T> 96template<typename T>
90struct auto_ptr 97struct auto_ptr
91{ 98{
92 T *p; 99 T *p;
93 100
94 auto_ptr () : p (0) { } 101 auto_ptr () : p (0) { }
102
103 explicit
95 auto_ptr (T *a) : p (a) { } 104 auto_ptr (T *a) : p (a) { }
96 105
97 auto_ptr (auto_ptr<T> &a) 106 auto_ptr (auto_ptr &a)
98 { 107 {
99 p = a.p; 108 p = a.p;
100 a.p = 0; 109 a.p = 0;
101 } 110 }
102 111
107 a.p = 0; 116 a.p = 0;
108 } 117 }
109 118
110 ~auto_ptr () 119 ~auto_ptr ()
111 { 120 {
112 free (p); 121 delete p;
122 }
123
124 void reset (T *a)
125 {
126 delete p;
127 p = a;
113 } 128 }
114 129
115 // void because it makes sense in our context 130 // void because it makes sense in our context
116 void operator = (T *a) 131 void operator =(auto_ptr &a)
117 { 132 {
118 free (p); 133 reset (a.release ());
119 p = a;
120 }
121
122 void operator = (auto_ptr &a)
123 {
124 *this = a.p;
125 a.p = 0;
126 } 134 }
127 135
128 template<typename A> 136 template<typename A>
129 void operator = (auto_ptr<A> &a) 137 void operator =(auto_ptr<A> &a)
130 { 138 {
131 *this = a.p; 139 reset (a.release ());
132 a.p = 0;
133 } 140 }
134 141
142 T *operator ->() const { return p; }
135 operator T * () const { return p; } 143 T &operator *() const { return *p; }
136 144
145 operator T *() { return p; }
137 T *operator -> () const { return p; } 146 T *get () const { return p; }
138 T &operator * () const { return *p; }
139 147
140 T *get () 148 T *release()
141 { 149 {
142 T *r = p; 150 T *r = p;
143 p = 0; 151 p = 0;
144 return r; 152 return r;
145 } 153 }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines