ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/rxvtutil.h
Revision: 1.3
Committed: Sat Aug 21 05:32:00 2004 UTC (19 years, 9 months ago) by root
Content type: text/plain
Branch: MAIN
CVS Tags: rel-3_8
Changes since 1.2: +6 -0 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 #ifndef RXVT_UTIL_H
2     #define RXVT_UTIL_H
3    
4     extern class byteorder {
5     static unsigned int e; // at least 32 bits
6     public:
7     byteorder ();
8    
9     static bool big_endian () { return e == 0x11223344; };
10     static bool network () { return e == 0x11223344; };
11     static bool little_endian () { return e == 0x44332211; };
12     static bool vax () { return e == 0x44332211; };
13     } byteorder;
14    
15 root 1.2 template<typename T, typename U>
16     static inline T min (T a, U b) { return a < b ? a : (T)b; }
17     template<typename T, typename U>
18     static inline T max (T a, U b) { return a > b ? a : (T)b; }
19 root 1.1
20     #include "simplevec.h"
21    
22     template<typename T>
23     struct vector : simplevec<T>
24     { };
25    
26     #if 0
27     template<typename T>
28     struct rxvt_vec : simplevec<void *> {
29     typedef T *iterator;
30    
31     void push_back (T d) { simplevec<void *>::push_back ((void *)d); }
32     T pop_back () { return (T*)simplevec<void *>::pop_back (); }
33     void erase (int i) { erase (begin () + i); }
34     void erase (iterator i) { simplevec<void *>::erase ((void **)i); }
35     iterator begin () const { return (iterator)simplevec<void *>::begin (); }
36     iterator end () const { return (iterator)simplevec<void *>::end (); }
37     T &operator [] (int i) { return * (T *) (& ((* (simplevec<void *> *)this)[i])); }
38     const T &operator [] (int i) const { return * (const T *) (& ((* (const simplevec<void *> *)this)[i])); }
39     };
40     #endif
41    
42     template <typename I, typename T>
43     I find (I first, I last, const T& value)
44     {
45     while (first != last && *first != value)
46     ++first;
47    
48     return first;
49     }
50    
51     template<typename T>
52     struct auto_ptr {
53     T *p;
54    
55     auto_ptr () : p (0) { }
56     auto_ptr (T *a) : p (a) { }
57    
58     auto_ptr (auto_ptr<T> &a)
59     {
60     p = a.p;
61     a.p = 0;
62     }
63    
64     template<typename A>
65     auto_ptr (auto_ptr<A> &a)
66     {
67     p = a.p;
68     a.p = 0;
69     }
70    
71     ~auto_ptr ()
72     {
73     delete p;
74     }
75    
76     // void because it makes sense in our context
77     void operator = (T *a)
78     {
79     delete p;
80     p = a;
81     }
82    
83     void operator = (auto_ptr &a)
84     {
85     *this = a.p;
86     a.p = 0;
87     }
88    
89     template<typename A>
90     void operator = (auto_ptr<A> &a)
91     {
92     *this = a.p;
93     a.p = 0;
94     }
95    
96     operator T * () const { return p; }
97    
98     T *operator -> () const { return p; }
99     T &operator * () const { return *p; }
100    
101     T *get ()
102     {
103     T *r = p;
104     p = 0;
105     return r;
106     }
107     };
108    
109     typedef auto_ptr<char> auto_str;
110    
111     struct stringvec : simplevec<char *>
112     {
113     ~stringvec ()
114     {
115     for (char **c = begin (); c != end (); c++)
116     delete [] *c;
117     }
118     };
119 root 1.3
120     struct zero_initialized {
121     void *operator new (size_t s);
122     void operator delete (void *p, size_t s);
123     };
124    
125 root 1.1 #endif
126