diff --git a/src/bees-types.cc b/src/bees-types.cc index 2baad0e..9be56cf 100644 --- a/src/bees-types.cc +++ b/src/bees-types.cc @@ -183,6 +183,24 @@ BeesFileRange::grow_begin(off_t delta) return m_begin; } +off_t +BeesFileRange::shrink_begin(off_t delta) +{ + THROW_CHECK1(invalid_argument, delta, delta > 0); + THROW_CHECK3(invalid_argument, delta, m_begin, m_end, delta + m_begin < m_end); + m_begin += delta; + return m_begin; +} + +off_t +BeesFileRange::shrink_end(off_t delta) +{ + THROW_CHECK1(invalid_argument, delta, delta > 0); + THROW_CHECK2(invalid_argument, delta, m_end, m_end >= delta); + m_end -= delta; + return m_end; +} + BeesFileRange::BeesFileRange(const BeesBlockData &bbd) : m_fd(bbd.fd()), m_begin(bbd.begin()), @@ -589,6 +607,22 @@ BeesRangePair::copy_closed() const return BeesRangePair(first.copy_closed(), second.copy_closed()); } +void +BeesRangePair::shrink_begin(off_t const delta) +{ + first.shrink_begin(delta); + second.shrink_begin(delta); + THROW_CHECK2(runtime_error, first.size(), second.size(), first.size() == second.size()); +} + +void +BeesRangePair::shrink_end(off_t const delta) +{ + first.shrink_end(delta); + second.shrink_end(delta); + THROW_CHECK2(runtime_error, first.size(), second.size(), first.size() == second.size()); +} + ostream & operator<<(ostream &os, const BeesAddress &ba) { diff --git a/src/bees.h b/src/bees.h index 769659b..2db4341 100644 --- a/src/bees.h +++ b/src/bees.h @@ -300,6 +300,11 @@ public: off_t grow_begin(off_t delta); /// @} + /// @{ Make range smaller + off_t shrink_end(off_t delta); + off_t shrink_begin(off_t delta); + /// @} + friend ostream & operator<<(ostream &os, const BeesFileRange &bfr); }; @@ -665,6 +670,8 @@ class BeesRangePair : public pair { public: BeesRangePair(const BeesFileRange &src, const BeesFileRange &dst); bool grow(shared_ptr ctx, bool constrained); + void shrink_begin(const off_t delta); + void shrink_end(const off_t delta); BeesRangePair copy_closed() const; bool operator<(const BeesRangePair &that) const; friend ostream & operator<<(ostream &os, const BeesRangePair &brp);