ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/common/shstr.C
(Generate patch)

Comparing deliantra/server/common/shstr.C (file contents):
Revision 1.9 by root, Mon Sep 4 17:16:19 2006 UTC vs.
Revision 1.10 by root, Tue Sep 5 19:18:04 2006 UTC

2 * shstr.C 2 * shstr.C
3 */ 3 */
4 4
5#include <cstring> 5#include <cstring>
6#include <cstdlib> 6#include <cstdlib>
7
8#include <glib.h>
7 9
8#include <tr1/unordered_set> 10#include <tr1/unordered_set>
9 11
10#include "shstr.h" 12#include "shstr.h"
11#include "util.h" 13#include "util.h"
16 18
17static const char *makevec (const char *s) 19static const char *makevec (const char *s)
18{ 20{
19 int len = strlen (s); 21 int len = strlen (s);
20 22
21 const char *v = (const char *)(2 + (int *)malloc (sizeof (int) * 2 + len + 1)); 23 const char *v = (const char *)(2 + (int *)g_slice_alloc (sizeof (int) * 2 + len + 1));
22 24
23 shstr::length (v) = len; 25 shstr::length (v) = len;
24 shstr::refcnt (v) = 1; 26 shstr::refcnt (v) = 1;
25 27
26 memcpy ((char *)v, s, len + 1); 28 memcpy ((char *)v, s, len + 1);
74 76
75 if (i == ht.end ()) 77 if (i == ht.end ())
76 i = ht.begin (); 78 i = ht.begin ();
77 79
78 // go through all strings roughly once every 4 minutes 80 // go through all strings roughly once every 4 minutes
79 int n = ht.size () / 256 + 16; 81 int n = ht.size () / 256 + 16000;
80 82
81 for (;;) 83 for (;;)
82 { 84 {
83 if (i == ht.end ()) 85 if (i == ht.end ())
84 { 86 {
91 { 93 {
92 HT::iterator o = i++; 94 HT::iterator o = i++;
93 const char *s = *o; 95 const char *s = *o;
94 ht.erase (o); 96 ht.erase (o);
95 97
98 int len = length (s);
99
96 //printf ("GC %4d %3d %d >%s<%d\n", (int)ht.size (), n, shstr::refcnt (s), s, shstr::length (s)); 100 //printf ("GC %4d %3d %d >%s<%d\n", (int)ht.size (), n, shstr::refcnt (s), s, shstr::length (s));
97 free (-2 + (int *)s); 101 g_slice_free1 (sizeof (int) * 2 + length (s) + 1, -2 + (int *)s);
98 } 102 }
99 else 103 else
100 ++i; 104 ++i;
101 } 105 }
102 106

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines