ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/include/util.h
(Generate patch)

Comparing deliantra/server/include/util.h (file contents):
Revision 1.3 by root, Mon Sep 4 11:07:59 2006 UTC vs.
Revision 1.7 by root, Mon Sep 11 20:28:37 2006 UTC

8#endif 8#endif
9 9
10// makes dynamically allocated objects zero-initialised 10// makes dynamically allocated objects zero-initialised
11struct zero_initialised 11struct zero_initialised
12{ 12{
13 void *operator new (size_t s, void *);
13 void *operator new (size_t s); 14 void *operator new (size_t s);
14 void *operator new [] (size_t s); 15 void *operator new [] (size_t s);
15 void operator delete (void *p, size_t s); 16 void operator delete (void *p, size_t s);
16 void operator delete [] (void *p, size_t s); 17 void operator delete [] (void *p, size_t s);
17}; 18};
18 19
20struct refcounted
21{
22 mutable int refcnt;
23 refcounted () : refcnt (0) { }
24 void refcnt_inc () { ++refcnt; }
25 void refcnt_dec () { --refcnt;
26 if (refcnt < 0)abort();}//D
27};
28
29template<class T>
30struct refptr
31{
32 T *p;
33
34 refptr () : p(0) { }
35 refptr (const refptr<T> &p) : p(p.p) { if (p) p->refcnt_inc (); }
36 refptr (T *p) : p(p) { if (p) p->refcnt_inc (); }
37 ~refptr () { if (p) p->refcnt_dec (); }
38
39 const refptr<T> &operator =(T *o)
40 {
41 if (p) p->refcnt_dec ();
42 p = o;
43 if (p) p->refcnt_inc ();
44
45 return *this;
46 }
47
48 const refptr<T> &operator =(const refptr<T> o)
49 {
50 *this = o.p;
51 return *this;
52 }
53
54 T &operator * () const { return *p; }
55 T *operator ->() const { return p; }
56
57 operator T *() const { return p; }
58};
59
60struct str_hash
61{
62 std::size_t operator ()(const char *s) const
63 {
64 unsigned long hash = 0;
65
66 /* use the one-at-a-time hash function, which supposedly is
67 * better than the djb2-like one used by perl5.005, but
68 * certainly is better then the bug used here before.
69 * see http://burtleburtle.net/bob/hash/doobs.html
70 */
71 while (*s)
72 {
73 hash += *s++;
74 hash += hash << 10;
75 hash ^= hash >> 6;
76 }
77
78 hash += hash << 3;
79 hash ^= hash >> 11;
80 hash += hash << 15;
81
82 return hash;
83 }
84};
85
86struct str_equal
87{
88 bool operator ()(const char *a, const char *b) const
89 {
90 return !strcmp (a, b);
91 }
92};
93
94#include <vector>
95
96template<class obj>
97struct unordered_vector : std::vector<obj>
98{
99 typedef typename std::vector<obj>::iterator iterator;
100
101 void erase (unsigned int pos)
102 {
103 if (pos < this->size () - 1)
104 (*this)[pos] = (*this)[this->size () - 1];
105
106 this->pop_back ();
107 }
108
109 void erase (iterator i)
110 {
111 erase ((unsigned int )(i - this->begin ()));
112 }
113};
114
19#endif 115#endif
20 116

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines