mirror of
https://github.com/Zygo/bees.git
synced 2025-05-17 21:35:45 +02:00
types: add shrink_begin and shrink_end methods for BeesFileRange and BeesRangePair
These allow trimming of overlapping dedupes. Signed-off-by: Zygo Blaxell <bees@furryterror.org>
This commit is contained in:
parent
05bf1ebf76
commit
97eab9655c
@ -183,6 +183,24 @@ BeesFileRange::grow_begin(off_t delta)
|
|||||||
return m_begin;
|
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) :
|
BeesFileRange::BeesFileRange(const BeesBlockData &bbd) :
|
||||||
m_fd(bbd.fd()),
|
m_fd(bbd.fd()),
|
||||||
m_begin(bbd.begin()),
|
m_begin(bbd.begin()),
|
||||||
@ -589,6 +607,22 @@ BeesRangePair::copy_closed() const
|
|||||||
return BeesRangePair(first.copy_closed(), second.copy_closed());
|
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 &
|
ostream &
|
||||||
operator<<(ostream &os, const BeesAddress &ba)
|
operator<<(ostream &os, const BeesAddress &ba)
|
||||||
{
|
{
|
||||||
|
@ -300,6 +300,11 @@ public:
|
|||||||
off_t grow_begin(off_t delta);
|
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);
|
friend ostream & operator<<(ostream &os, const BeesFileRange &bfr);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -665,6 +670,8 @@ class BeesRangePair : public pair<BeesFileRange, BeesFileRange> {
|
|||||||
public:
|
public:
|
||||||
BeesRangePair(const BeesFileRange &src, const BeesFileRange &dst);
|
BeesRangePair(const BeesFileRange &src, const BeesFileRange &dst);
|
||||||
bool grow(shared_ptr<BeesContext> ctx, bool constrained);
|
bool grow(shared_ptr<BeesContext> ctx, bool constrained);
|
||||||
|
void shrink_begin(const off_t delta);
|
||||||
|
void shrink_end(const off_t delta);
|
||||||
BeesRangePair copy_closed() const;
|
BeesRangePair copy_closed() const;
|
||||||
bool operator<(const BeesRangePair &that) const;
|
bool operator<(const BeesRangePair &that) const;
|
||||||
friend ostream & operator<<(ostream &os, const BeesRangePair &brp);
|
friend ostream & operator<<(ostream &os, const BeesRangePair &brp);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user