48 lines
1.2 KiB
C++
48 lines
1.2 KiB
C++
// This file Copyright © 2007-2022 Mnemosyne LLC.
|
|
// It may be used under GPLv2 (SPDX: GPL-2.0-only), GPLv3 (SPDX: GPL-3.0-only),
|
|
// or any future license endorsed by Mnemosyne LLC.
|
|
// License text can be found in the licenses/ folder.
|
|
|
|
#include <event2/util.h>
|
|
|
|
#include "transmission.h"
|
|
|
|
#include "block-info.h"
|
|
#include "tr-assert.h"
|
|
|
|
void tr_block_info::initSizes(uint64_t total_size_in, uint64_t piece_size_in)
|
|
{
|
|
total_size = total_size_in;
|
|
piece_size = piece_size_in;
|
|
|
|
TR_ASSERT(piece_size == 0 || piece_size >= BlockSize);
|
|
|
|
if (piece_size == 0)
|
|
{
|
|
*this = {};
|
|
return;
|
|
}
|
|
|
|
n_pieces = (total_size + piece_size - 1) / piece_size;
|
|
|
|
auto remainder = total_size % piece_size;
|
|
final_piece_size = remainder != 0U ? remainder : piece_size;
|
|
|
|
remainder = total_size % BlockSize;
|
|
final_block_size = remainder != 0U ? remainder : BlockSize;
|
|
|
|
n_blocks = (total_size + BlockSize - 1) / BlockSize;
|
|
|
|
#ifdef TR_ENABLE_ASSERTS
|
|
uint64_t t = n_pieces - 1;
|
|
t *= piece_size;
|
|
t += final_piece_size;
|
|
TR_ASSERT(t == total_size);
|
|
|
|
t = n_blocks - 1;
|
|
t *= BlockSize;
|
|
t += final_block_size;
|
|
TR_ASSERT(t == total_size);
|
|
#endif
|
|
}
|