mirror of
https://github.com/ETLCPP/etl.git
synced 2026-10-28 18:07:10 +08:00
Add checked index for circular buffer
This commit is contained in:
parent
e1ec90aade
commit
551deac9da
@ -123,6 +123,7 @@ const_reference operator[](size_t i) const
|
||||
```
|
||||
**Description**
|
||||
Returns a reference or const reference to the indexed element.
|
||||
Emits an `etl::circular_buffer_out_of_bounds` if ETL_CHECK_INDEX_OPERATOR is defined and the index is out of range of the deque. Undefined behaviour if asserts or exceptions are not enabled.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@ -83,6 +83,19 @@ namespace etl
|
||||
}
|
||||
};
|
||||
|
||||
//***************************************************************************
|
||||
/// circular_buffer out of bounds exception.
|
||||
//***************************************************************************
|
||||
class circular_buffer_out_of_bounds : public etl::circular_buffer_exception
|
||||
{
|
||||
public:
|
||||
|
||||
circular_buffer_out_of_bounds(string_type file_name_, numeric_type line_number_)
|
||||
: etl::circular_buffer_exception(ETL_ERROR_TEXT("circular_buffer:bounds", ETL_CIRCULAR_BUFFER_FILE_ID"C"), file_name_, line_number_)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
//***************************************************************************
|
||||
///
|
||||
//***************************************************************************
|
||||
@ -888,6 +901,8 @@ namespace etl
|
||||
//*************************************************************************
|
||||
reference operator[](size_t index)
|
||||
{
|
||||
ETL_ASSERT_CHECK_INDEX_OPERATOR(index < size(), ETL_ERROR(circular_buffer_out_of_bounds));
|
||||
|
||||
return pbuffer[(out + index) % buffer_size];
|
||||
}
|
||||
|
||||
@ -897,6 +912,8 @@ namespace etl
|
||||
//*************************************************************************
|
||||
const_reference operator[](size_t index) const
|
||||
{
|
||||
ETL_ASSERT_CHECK_INDEX_OPERATOR(index < size(), ETL_ERROR(circular_buffer_out_of_bounds));
|
||||
|
||||
return pbuffer[(out + index) % buffer_size];
|
||||
}
|
||||
|
||||
|
||||
@ -647,6 +647,8 @@ namespace
|
||||
{
|
||||
CHECK_EQUAL(input2[i], data[i]);
|
||||
}
|
||||
|
||||
CHECK_THROW(data[data.size()], etl::circular_buffer_out_of_bounds);
|
||||
}
|
||||
|
||||
//*************************************************************************
|
||||
@ -662,6 +664,8 @@ namespace
|
||||
{
|
||||
CHECK_EQUAL(input[i + 3], data[i]);
|
||||
}
|
||||
|
||||
CHECK_THROW(data[data.size()], etl::circular_buffer_out_of_bounds);
|
||||
}
|
||||
|
||||
//*************************************************************************
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user