Lines Matching +full:len +full:- +full:or +full:- +full:define

6  * This library is free software; you can redistribute it and/or
9 * version 2.1 of the License, or (at your option) any later version.
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
22 #include "qemu/host-utils.h"
26 #define BUFFER_MIN_INIT_SIZE 4096
27 #define BUFFER_MIN_SHRINK_SIZE 65536
29 /* define the factor alpha for the exponential smoothing
32 #define BUFFER_AVG_SIZE_SHIFT 7
34 static size_t buffer_req_size(Buffer *buffer, size_t len) in buffer_req_size() argument
37 pow2ceil(buffer->offset + len)); in buffer_req_size()
40 static void buffer_adj_size(Buffer *buffer, size_t len) in buffer_adj_size() argument
42 size_t old = buffer->capacity; in buffer_adj_size()
43 buffer->capacity = buffer_req_size(buffer, len); in buffer_adj_size()
44 buffer->buffer = g_realloc(buffer->buffer, buffer->capacity); in buffer_adj_size()
45 trace_buffer_resize(buffer->name ?: "unnamed", in buffer_adj_size()
46 old, buffer->capacity); in buffer_adj_size()
50 buffer->avg_size = MAX(buffer->avg_size, in buffer_adj_size()
51 buffer->capacity << BUFFER_AVG_SIZE_SHIFT); in buffer_adj_size()
59 buffer->name = g_strdup_vprintf(name, ap); in buffer_init()
65 return buffer->avg_size >> BUFFER_AVG_SIZE_SHIFT; in buffer_get_avg_size()
73 * avg_size = avg_size * ( 1 - a ) + required_size * a in buffer_shrink()
75 buffer->avg_size *= (1 << BUFFER_AVG_SIZE_SHIFT) - 1; in buffer_shrink()
76 buffer->avg_size >>= BUFFER_AVG_SIZE_SHIFT; in buffer_shrink()
77 buffer->avg_size += buffer_req_size(buffer, 0); in buffer_shrink()
83 if (new < buffer->capacity >> 3 && in buffer_shrink()
91 void buffer_reserve(Buffer *buffer, size_t len) in buffer_reserve() argument
93 if ((buffer->capacity - buffer->offset) < len) { in buffer_reserve()
94 buffer_adj_size(buffer, len); in buffer_reserve()
100 return buffer->offset == 0; in buffer_empty()
105 return buffer->buffer + buffer->offset; in buffer_end()
110 buffer->offset = 0; in buffer_reset()
116 trace_buffer_free(buffer->name ?: "unnamed", buffer->capacity); in buffer_free()
117 g_free(buffer->buffer); in buffer_free()
118 g_free(buffer->name); in buffer_free()
119 buffer->offset = 0; in buffer_free()
120 buffer->capacity = 0; in buffer_free()
121 buffer->buffer = NULL; in buffer_free()
122 buffer->name = NULL; in buffer_free()
125 void buffer_append(Buffer *buffer, const void *data, size_t len) in buffer_append() argument
127 memcpy(buffer->buffer + buffer->offset, data, len); in buffer_append()
128 buffer->offset += len; in buffer_append()
131 void buffer_advance(Buffer *buffer, size_t len) in buffer_advance() argument
133 memmove(buffer->buffer, buffer->buffer + len, in buffer_advance()
134 (buffer->offset - len)); in buffer_advance()
135 buffer->offset -= len; in buffer_advance()
141 trace_buffer_move_empty(to->name ?: "unnamed", in buffer_move_empty()
142 from->offset, in buffer_move_empty()
143 from->name ?: "unnamed"); in buffer_move_empty()
144 assert(to->offset == 0); in buffer_move_empty()
146 g_free(to->buffer); in buffer_move_empty()
147 to->offset = from->offset; in buffer_move_empty()
148 to->capacity = from->capacity; in buffer_move_empty()
149 to->buffer = from->buffer; in buffer_move_empty()
151 from->offset = 0; in buffer_move_empty()
152 from->capacity = 0; in buffer_move_empty()
153 from->buffer = NULL; in buffer_move_empty()
158 if (to->offset == 0) { in buffer_move()
163 trace_buffer_move(to->name ?: "unnamed", in buffer_move()
164 from->offset, in buffer_move()
165 from->name ?: "unnamed"); in buffer_move()
166 buffer_reserve(to, from->offset); in buffer_move()
167 buffer_append(to, from->buffer, from->offset); in buffer_move()
169 g_free(from->buffer); in buffer_move()
170 from->offset = 0; in buffer_move()
171 from->capacity = 0; in buffer_move()
172 from->buffer = NULL; in buffer_move()