move GapBuffer::copy_to() implementation out of header file
This commit is contained in:
parent
f7e077d8ef
commit
0ab26dea2f
@ -91,3 +91,25 @@ void GapBuffer::move_gap(size_t position)
|
|||||||
m_gap_position = position;
|
m_gap_position = position;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GapBuffer::copy_to(size_t source_position, size_t length, GapBuffer & other, size_t destination_position)
|
||||||
|
{
|
||||||
|
if ((source_position < m_size) &&
|
||||||
|
(length > 0u) &&
|
||||||
|
((source_position + length) <= m_size))
|
||||||
|
{
|
||||||
|
if ((m_gap_position <= source_position) ||
|
||||||
|
(m_gap_position >= (source_position + length)))
|
||||||
|
{
|
||||||
|
/* The gap is before or after the range of data to copy. */
|
||||||
|
other.insert(destination_position, address(source_position), length);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* The gap is in the middle of the range of data to copy. */
|
||||||
|
size_t pre_gap_size = m_gap_position - source_position;
|
||||||
|
other.insert(destination_position, address(source_position), pre_gap_size);
|
||||||
|
other.insert(destination_position + pre_gap_size, address(source_position + pre_gap_size), length - pre_gap_size);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -111,27 +111,7 @@ public:
|
|||||||
* @param destination_position
|
* @param destination_position
|
||||||
* Position in the destination GapBuffer to copy the data to.
|
* Position in the destination GapBuffer to copy the data to.
|
||||||
*/
|
*/
|
||||||
void copy_to(size_t source_position, size_t length, GapBuffer & other, size_t destination_position)
|
void copy_to(size_t source_position, size_t length, GapBuffer & other, size_t destination_position);
|
||||||
{
|
|
||||||
if ((source_position < m_size) &&
|
|
||||||
(length > 0u) &&
|
|
||||||
((source_position + length) <= m_size))
|
|
||||||
{
|
|
||||||
if ((m_gap_position <= source_position) ||
|
|
||||||
(m_gap_position >= (source_position + length)))
|
|
||||||
{
|
|
||||||
/* The gap is before or after the range of data to copy. */
|
|
||||||
other.insert(destination_position, address(source_position), length);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* The gap is in the middle of the range of data to copy. */
|
|
||||||
size_t pre_gap_size = m_gap_position - source_position;
|
|
||||||
other.insert(destination_position, address(source_position), pre_gap_size);
|
|
||||||
other.insert(destination_position + pre_gap_size, address(source_position + pre_gap_size), length - pre_gap_size);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/** Address of the allocated memory buffer. */
|
/** Address of the allocated memory buffer. */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user