Lines 303-310
Link Here
|
303 |
this->n_parts_total = n_parts_total; |
303 |
this->n_parts_total = n_parts_total; |
304 |
this->n_parts_found = 0; // they haven't been added yet |
304 |
this->n_parts_found = 0; // they haven't been added yet |
305 |
|
305 |
|
306 |
if (n_parts_found > parts.size()) |
306 |
parts.clear(); |
307 |
parts.resize (n_parts_found); |
|
|
308 |
} |
307 |
} |
309 |
|
308 |
|
310 |
void |
309 |
void |
Lines 312-332
Link Here
|
312 |
const StringView & mid, |
311 |
const StringView & mid, |
313 |
bytes_t bytes) |
312 |
bytes_t bytes) |
314 |
{ |
313 |
{ |
315 |
if (n_parts_found >= parts.size()) |
|
|
316 |
parts.resize (n_parts_found+1); |
317 |
|
318 |
Part& p = *(&parts.front() + n_parts_found++); |
319 |
p.number = number; |
320 |
p.bytes = bytes; |
321 |
|
314 |
|
322 |
Packer packer; |
315 |
Packer packer; |
323 |
pack_message_id (packer, mid, reference_mid); |
316 |
pack_message_id (packer, mid, reference_mid); |
324 |
p.len_used = packer.size (); |
317 |
Part p(number,bytes,packer.size()); |
325 |
if (p.len_alloced < p.len_used) { |
|
|
326 |
delete [] p.packed_mid; |
327 |
p.packed_mid = new char [p.len_used]; |
328 |
p.len_alloced = p.len_used; |
329 |
} |
330 |
packer.pack (p.packed_mid); |
318 |
packer.pack (p.packed_mid); |
331 |
packed_mids_len += p.len_used; |
319 |
packed_mids_len += p.len_used; |
332 |
|
320 |
|
Lines 337-344
Link Here
|
337 |
assert (mid == tmp); |
325 |
assert (mid == tmp); |
338 |
#endif |
326 |
#endif |
339 |
|
327 |
|
340 |
if (n_parts_total < n_parts_found) |
328 |
if (n_parts_total < ++n_parts_found) |
341 |
n_parts_total = n_parts_found; |
329 |
n_parts_total = n_parts_found; |
|
|
330 |
parts.push_back(p); |
342 |
} |
331 |
} |
343 |
|
332 |
|
344 |
PartBatch :: Part& |
333 |
PartBatch :: Part& |
Lines 346-352
Link Here
|
346 |
{ |
335 |
{ |
347 |
number = that.number; |
336 |
number = that.number; |
348 |
bytes = that.bytes; |
337 |
bytes = that.bytes; |
349 |
len_used = len_alloced = that.len_used; |
338 |
len_used = that.len_used; |
350 |
delete [] packed_mid; |
339 |
delete [] packed_mid; |
351 |
packed_mid = new char [len_used]; |
340 |
packed_mid = new char [len_used]; |
352 |
memcpy (packed_mid, that.packed_mid, len_used); |
341 |
memcpy (packed_mid, that.packed_mid, len_used); |
Lines 357-367
Link Here
|
357 |
number (that.number), |
346 |
number (that.number), |
358 |
bytes (that.bytes), |
347 |
bytes (that.bytes), |
359 |
len_used (that.len_used), |
348 |
len_used (that.len_used), |
360 |
len_alloced (that.len_used), |
|
|
361 |
packed_mid (new char [len_used]) |
349 |
packed_mid (new char [len_used]) |
362 |
{ |
350 |
{ |
363 |
memcpy (packed_mid, that.packed_mid, len_used); |
351 |
memcpy (packed_mid, that.packed_mid, len_used); |
364 |
} |
352 |
} |
|
|
353 |
PartBatch :: Part :: Part (number_t n, bytes_t b, size_t l): |
354 |
number(n), |
355 |
bytes(b), |
356 |
len_used(l), |
357 |
packed_mid(new char [len_used]) |
358 |
{ |
359 |
} |
365 |
|
360 |
|
366 |
void |
361 |
void |
367 |
PartBatch :: sort (void) |
362 |
PartBatch :: sort (void) |