ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/rxvtutil.h
Revision: 1.1
Committed: Sun Aug 15 00:37:04 2004 UTC (19 years, 10 months ago) by root
Content type: text/plain
Branch: MAIN
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     template<typename T, typename U> static inline T min (T a, U b) { return a < b ? a : b; }
16     template<typename T, typename U> static inline T max (T a, U b) { return a > b ? a : b; }
17    
18     #include "simplevec.h"
19    
20     template<typename T>
21     struct vector : simplevec<T>
22     { };
23    
24     #if 0
25     template<typename T>
26     struct rxvt_vec : simplevec<void *> {
27     typedef T *iterator;
28    
29     void push_back (T d) { simplevec<void *>::push_back ((void *)d); }
30     T pop_back () { return (T*)simplevec<void *>::pop_back (); }
31     void erase (int i) { erase (begin () + i); }
32     void erase (iterator i) { simplevec<void *>::erase ((void **)i); }
33     iterator begin () const { return (iterator)simplevec<void *>::begin (); }
34     iterator end () const { return (iterator)simplevec<void *>::end (); }
35     T &operator [] (int i) { return * (T *) (& ((* (simplevec<void *> *)this)[i])); }
36     const T &operator [] (int i) const { return * (const T *) (& ((* (const simplevec<void *> *)this)[i])); }
37     };
38     #endif
39    
40     template <typename I, typename T>
41     I find (I first, I last, const T& value)
42     {
43     while (first != last && *first != value)
44     ++first;
45    
46     return first;
47     }
48    
49     template<typename T>
50     struct auto_ptr {
51     T *p;
52    
53     auto_ptr () : p (0) { }
54     auto_ptr (T *a) : p (a) { }
55    
56     auto_ptr (auto_ptr<T> &a)
57     {
58     p = a.p;
59     a.p = 0;
60     }
61    
62     template<typename A>
63     auto_ptr (auto_ptr<A> &a)
64     {
65     p = a.p;
66     a.p = 0;
67     }
68    
69     ~auto_ptr ()
70     {
71     delete p;
72     }
73    
74     // void because it makes sense in our context
75     void operator = (T *a)
76     {
77     delete p;
78     p = a;
79     }
80    
81     void operator = (auto_ptr &a)
82     {
83     *this = a.p;
84     a.p = 0;
85     }
86    
87     template<typename A>
88     void operator = (auto_ptr<A> &a)
89     {
90     *this = a.p;
91     a.p = 0;
92     }
93    
94     operator T * () const { return p; }
95    
96     T *operator -> () const { return p; }
97     T &operator * () const { return *p; }
98    
99     T *get ()
100     {
101     T *r = p;
102     p = 0;
103     return r;
104     }
105     };
106    
107     typedef auto_ptr<char> auto_str;
108    
109     struct stringvec : simplevec<char *>
110     {
111     ~stringvec ()
112     {
113     for (char **c = begin (); c != end (); c++)
114     delete [] *c;
115     }
116     };
117     #endif
118