ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/salloc.C
Revision: 1.4
Committed: Sat Jan 31 00:20:21 2004 UTC (20 years, 3 months ago) by pcg
Content type: text/plain
Branch: MAIN
CVS Tags: before_astyle, after_astyle
Changes since 1.3: +1 -1 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 pcg 1.1 #include "salloc.h"
2    
3     #define SALLOC_BLOCK 65536 // size of basic block to allocate
4    
5 pcg 1.4 rxvt_salloc::rxvt_salloc (unsigned int size)
6 pcg 1.1 {
7     this->size = size < sizeof (chain) ? sizeof (chain) : size;
8     firstline = 0;
9     firstblock = 0;
10     firstfree = SALLOC_BLOCK;
11     }
12    
13     rxvt_salloc::~rxvt_salloc ()
14     {
15     while (firstblock)
16     {
17     chain *next = firstblock->next;
18     ::free (firstblock);
19     firstblock = next;
20     }
21     }
22    
23     void *
24     rxvt_salloc::alloc ()
25     {
26     void *r;
27    
28     if (firstline)
29     {
30     r = (void *)firstline;
31     firstline = firstline->next;
32     }
33     else
34     {
35     if (firstfree + size > SALLOC_BLOCK)
36     {
37     chain *next = (chain *)rxvt_malloc ((SALLOC_BLOCK - sizeof (chain)) / size * size + sizeof (chain));
38     next->next = firstblock;
39     firstblock = next;
40     firstfree = sizeof (chain);
41     }
42    
43     r = (void *)((char *)firstblock + firstfree);
44    
45     firstfree += size;
46     }
47    
48     return r;
49     }
50    
51     void
52     rxvt_salloc::free (void *data)
53     {
54     chain *line = (chain *)data;
55     line->next = firstline;
56     firstline = line;
57     }
58