mirror of
				https://github.com/Zygo/bees.git
				synced 2025-11-03 19:50:34 +01: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:
		@@ -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)
 | 
			
		||||
{
 | 
			
		||||
 
 | 
			
		||||
@@ -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<BeesFileRange, BeesFileRange> {
 | 
			
		||||
public:
 | 
			
		||||
	BeesRangePair(const BeesFileRange &src, const BeesFileRange &dst);
 | 
			
		||||
	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;
 | 
			
		||||
	bool operator<(const BeesRangePair &that) const;
 | 
			
		||||
friend ostream & operator<<(ostream &os, const BeesRangePair &brp);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user