… | |
… | |
24 | #include <cstdio> |
24 | #include <cstdio> |
25 | |
25 | |
26 | void |
26 | void |
27 | dynbuf::init (int initial) |
27 | dynbuf::init (int initial) |
28 | { |
28 | { |
|
|
29 | cextend = extend; |
29 | _size = 0; |
30 | _size = 0; |
30 | |
31 | |
31 | first = last = (chunk *)salloc<char> (sizeof (chunk) + initial); |
32 | first = last = (chunk *)salloc<char> (sizeof (chunk) + initial); |
32 | first->alloc = sizeof (chunk) + initial; |
33 | first->alloc = sizeof (chunk) + initial; |
33 | first->next = 0; |
34 | first->next = 0; |
… | |
… | |
50 | } |
51 | } |
51 | |
52 | |
52 | void |
53 | void |
53 | dynbuf::clear () |
54 | dynbuf::clear () |
54 | { |
55 | { |
|
|
56 | cextend = extend; |
55 | free (first->next); |
57 | free (first->next); |
56 | |
58 | |
57 | _size = 0; |
59 | _size = 0; |
58 | ptr = first->data; |
60 | ptr = first->data; |
59 | end = ptr + first->alloc - sizeof (chunk); |
61 | end = ptr + first->alloc - sizeof (chunk); |
… | |
… | |
72 | { |
74 | { |
73 | finalise (); |
75 | finalise (); |
74 | |
76 | |
75 | do |
77 | do |
76 | { |
78 | { |
77 | extend += extend >> 1; |
79 | cextend += cextend >> 1; |
78 | extend = (extend + 15) & ~15; |
80 | cextend = (cextend + 15) & ~15; |
79 | } |
81 | } |
80 | while (extend < size); |
82 | while (cextend < size); |
81 | |
83 | |
82 | chunk *add = (chunk *) salloc<char> (sizeof (chunk) + extend); |
84 | chunk *add = (chunk *) salloc<char> (sizeof (chunk) + cextend); |
83 | add->alloc = sizeof (chunk) + extend; |
85 | add->alloc = sizeof (chunk) + cextend; |
84 | add->next = 0; |
86 | add->next = 0; |
85 | |
87 | |
86 | last->next = add; |
88 | last->next = add; |
87 | last = add; |
89 | last = add; |
88 | |
90 | |
89 | ptr = last->data; |
91 | ptr = last->data; |
90 | end = ptr + extend; |
92 | end = ptr + cextend; |
91 | } |
93 | } |
92 | |
94 | |
93 | void |
95 | void |
94 | dynbuf::linearise (void *data) |
96 | dynbuf::linearise (void *data) |
95 | { |
97 | { |