Make pread and DataView const.

GitOrigin-RevId: 4267ba93a1e83be55361c9f284f717151eb740cd
This commit is contained in:
levlam 2018-09-13 03:12:40 +03:00
parent a4f98024a0
commit ed33e23c40
4 changed files with 24 additions and 24 deletions

View File

@ -51,7 +51,7 @@ AesCbcState calc_aes_cbc_state_sha512(Slice seed) {
} }
template <class F> template <class F>
static Status data_view_for_each(DataView &data, F &&f) { static Status data_view_for_each(const DataView &data, F &&f) {
const int64 step = 128 << 10; const int64 step = 128 << 10;
for (int64 i = 0, size = data.size(); i < size; i += step) { for (int64 i = 0, size = data.size(); i < size; i += step) {
TRY_RESULT(bytes, data.pread(i, min(step, size - i))); TRY_RESULT(bytes, data.pread(i, min(step, size - i)));
@ -60,7 +60,7 @@ static Status data_view_for_each(DataView &data, F &&f) {
return Status::OK(); return Status::OK();
} }
Result<ValueHash> calc_value_hash(DataView &data_view) { Result<ValueHash> calc_value_hash(const DataView &data_view) {
Sha256State state; Sha256State state;
sha256_init(&state); sha256_init(&state);
data_view_for_each(data_view, [&state](BufferSlice bytes) { data_view_for_each(data_view, [&state](BufferSlice bytes) {
@ -93,7 +93,7 @@ int64 FileDataView::size() const {
return size_; return size_;
} }
Result<BufferSlice> FileDataView::pread(int64 offset, int64 size) { Result<BufferSlice> FileDataView::pread(int64 offset, int64 size) const {
auto slice = BufferSlice(narrow_cast<size_t>(size)); auto slice = BufferSlice(narrow_cast<size_t>(size));
TRY_RESULT(actual_size, fd_.pread(slice.as_slice(), offset)); TRY_RESULT(actual_size, fd_.pread(slice.as_slice(), offset));
if (static_cast<int64>(actual_size) != size) { if (static_cast<int64>(actual_size) != size) {
@ -109,7 +109,7 @@ int64 BufferSliceDataView::size() const {
return narrow_cast<int64>(buffer_slice_.size()); return narrow_cast<int64>(buffer_slice_.size());
} }
Result<BufferSlice> BufferSliceDataView::pread(int64 offset, int64 size) { Result<BufferSlice> BufferSliceDataView::pread(int64 offset, int64 size) const {
auto end_offset = size + offset; auto end_offset = size + offset;
if (this->size() < end_offset) { if (this->size() < end_offset) {
return Status::Error("Not enough data in BufferSlice"); return Status::Error("Not enough data in BufferSlice");
@ -117,20 +117,20 @@ Result<BufferSlice> BufferSliceDataView::pread(int64 offset, int64 size) {
return BufferSlice(buffer_slice_.as_slice().substr(narrow_cast<size_t>(offset), narrow_cast<size_t>(size))); return BufferSlice(buffer_slice_.as_slice().substr(narrow_cast<size_t>(offset), narrow_cast<size_t>(size)));
} }
ConcatDataView::ConcatDataView(DataView &left, DataView &right) : left_(left), right_(right) { ConcatDataView::ConcatDataView(const DataView &left, const DataView &right) : left_(left), right_(right) {
} }
int64 ConcatDataView::size() const { int64 ConcatDataView::size() const {
return left_.size() + right_.size(); return left_.size() + right_.size();
} }
Result<BufferSlice> ConcatDataView::pread(int64 offset, int64 size) { Result<BufferSlice> ConcatDataView::pread(int64 offset, int64 size) const {
auto end_offset = size + offset; auto end_offset = size + offset;
if (this->size() < end_offset) { if (this->size() < end_offset) {
return Status::Error("Not enough data in ConcatDataView"); return Status::Error("Not enough data in ConcatDataView");
} }
auto substr = [](DataView &slice, int64 offset, int64 size) -> Result<BufferSlice> { auto substr = [](const DataView &slice, int64 offset, int64 size) -> Result<BufferSlice> {
auto l = max(int64{0}, offset); auto l = max(int64{0}, offset);
auto r = min(slice.size(), offset + size); auto r = min(slice.size(), offset + size);
if (l >= r) { if (l >= r) {
@ -302,7 +302,7 @@ Result<ValueHash> Decryptor::finish() {
return ValueHash{res}; return ValueHash{res};
} }
Encryptor::Encryptor(AesCbcState aes_cbc_state, DataView &data_view) Encryptor::Encryptor(AesCbcState aes_cbc_state, const DataView &data_view)
: aes_cbc_state_(std::move(aes_cbc_state)), data_view_(data_view) { : aes_cbc_state_(std::move(aes_cbc_state)), data_view_(data_view) {
} }
@ -310,7 +310,7 @@ int64 Encryptor::size() const {
return data_view_.size(); return data_view_.size();
} }
Result<BufferSlice> Encryptor::pread(int64 offset, int64 size) { Result<BufferSlice> Encryptor::pread(int64 offset, int64 size) const {
if (offset != current_offset_) { if (offset != current_offset_) {
return Status::Error("Arbitrary offset is not supported"); return Status::Error("Arbitrary offset is not supported");
} }

View File

@ -70,7 +70,7 @@ class DataView {
DataView &operator=(DataView &&) = delete; DataView &operator=(DataView &&) = delete;
virtual int64 size() const = 0; virtual int64 size() const = 0;
virtual Result<BufferSlice> pread(int64 offset, int64 size) = 0; virtual Result<BufferSlice> pread(int64 offset, int64 size) const = 0;
virtual ~DataView() = default; virtual ~DataView() = default;
}; };
@ -79,7 +79,7 @@ class FileDataView : public DataView {
FileDataView(FileFd &fd, int64 size); FileDataView(FileFd &fd, int64 size);
int64 size() const override; int64 size() const override;
Result<BufferSlice> pread(int64 offset, int64 size) override; Result<BufferSlice> pread(int64 offset, int64 size) const override;
private: private:
FileFd &fd_; FileFd &fd_;
@ -90,7 +90,7 @@ class BufferSliceDataView : public DataView {
public: public:
explicit BufferSliceDataView(BufferSlice buffer_slice); explicit BufferSliceDataView(BufferSlice buffer_slice);
int64 size() const override; int64 size() const override;
Result<BufferSlice> pread(int64 offset, int64 size) override; Result<BufferSlice> pread(int64 offset, int64 size) const override;
private: private:
BufferSlice buffer_slice_; BufferSlice buffer_slice_;
@ -98,18 +98,18 @@ class BufferSliceDataView : public DataView {
class ConcatDataView : public DataView { class ConcatDataView : public DataView {
public: public:
ConcatDataView(DataView &left, DataView &right); ConcatDataView(const DataView &left, const DataView &right);
int64 size() const override; int64 size() const override;
Result<BufferSlice> pread(int64 offset, int64 size) override; Result<BufferSlice> pread(int64 offset, int64 size) const override;
private: private:
DataView &left_; const DataView &left_;
DataView &right_; const DataView &right_;
}; };
AesCbcState calc_aes_cbc_state_pbkdf2(Slice secret, Slice salt); AesCbcState calc_aes_cbc_state_pbkdf2(Slice secret, Slice salt);
AesCbcState calc_aes_cbc_state_sha512(Slice seed); AesCbcState calc_aes_cbc_state_sha512(Slice seed);
Result<ValueHash> calc_value_hash(DataView &data_view); Result<ValueHash> calc_value_hash(const DataView &data_view);
ValueHash calc_value_hash(Slice data); ValueHash calc_value_hash(Slice data);
BufferSlice gen_random_prefix(int64 data_size); BufferSlice gen_random_prefix(int64 data_size);
@ -175,14 +175,14 @@ class Decryptor {
// Encryption // Encryption
class Encryptor : public DataView { class Encryptor : public DataView {
public: public:
Encryptor(AesCbcState aes_cbc_state, DataView &data_view); Encryptor(AesCbcState aes_cbc_state, const DataView &data_view);
int64 size() const override; int64 size() const override;
Result<BufferSlice> pread(int64 offset, int64 size) override; Result<BufferSlice> pread(int64 offset, int64 size) const override;
private: private:
AesCbcState aes_cbc_state_; mutable AesCbcState aes_cbc_state_;
int64 current_offset_{0}; mutable int64 current_offset_{0};
DataView &data_view_; const DataView &data_view_;
}; };
// Main functions // Main functions

View File

@ -259,7 +259,7 @@ Result<size_t> FileFd::pwrite(Slice slice, int64 offset) {
return OS_ERROR(PSLICE() << "Pwrite to [fd = " << native_fd << "] at [offset = " << offset << "] has failed"); return OS_ERROR(PSLICE() << "Pwrite to [fd = " << native_fd << "] at [offset = " << offset << "] has failed");
} }
Result<size_t> FileFd::pread(MutableSlice slice, int64 offset) { Result<size_t> FileFd::pread(MutableSlice slice, int64 offset) const {
if (offset < 0) { if (offset < 0) {
return Status::Error("Offset must be non-negative"); return Status::Error("Offset must be non-negative");
} }

View File

@ -38,7 +38,7 @@ class FileFd {
Result<size_t> read(MutableSlice slice) TD_WARN_UNUSED_RESULT; Result<size_t> read(MutableSlice slice) TD_WARN_UNUSED_RESULT;
Result<size_t> pwrite(Slice slice, int64 offset) TD_WARN_UNUSED_RESULT; Result<size_t> pwrite(Slice slice, int64 offset) TD_WARN_UNUSED_RESULT;
Result<size_t> pread(MutableSlice slice, int64 offset) TD_WARN_UNUSED_RESULT; Result<size_t> pread(MutableSlice slice, int64 offset) const TD_WARN_UNUSED_RESULT;
enum class LockFlags { Write, Read, Unlock }; enum class LockFlags { Write, Read, Unlock };
Status lock(LockFlags flags, int32 max_tries = 1) TD_WARN_UNUSED_RESULT; Status lock(LockFlags flags, int32 max_tries = 1) TD_WARN_UNUSED_RESULT;