1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-09-27 18:55:48 +00:00

Adds a check against overrunning data.

This commit is contained in:
Thomas Harte 2019-10-19 18:17:44 -04:00
parent e8bc254f3f
commit 418cd07e17
2 changed files with 10 additions and 0 deletions

View File

@ -406,6 +406,9 @@ void CRT::set_immediate_default_phase(float phase) {
}
void CRT::output_data(int number_of_cycles, size_t number_of_samples) {
#ifndef NDEBUG
assert(number_of_samples <= allocated_data_length_);
#endif
scan_target_->end_data(number_of_samples);
Scan scan;
scan.type = Scan::Type::Data;

View File

@ -83,6 +83,10 @@ class CRT {
Outputs::Display::ScanTarget::Modals scan_target_modals_;
static const uint8_t DefaultAmplitude = 80;
#ifndef NDEBUG
size_t allocated_data_length_ = 0;
#endif
public:
/*! Constructs the CRT with a specified clock rate, height and colour subcarrier frequency.
The requested number of buffers, each with the requested number of bytes per pixel,
@ -221,6 +225,9 @@ class CRT {
@returns A pointer to the allocated area if room is available; @c nullptr otherwise.
*/
inline uint8_t *begin_data(std::size_t required_length, std::size_t required_alignment = 1) {
#ifndef NDEBUG
allocated_data_length_ = required_length;
#endif
return scan_target_->begin_data(required_length, required_alignment);
}