Reverse the linked list of data_validator_group and maintain a first node

for search from index 0

Fixes issue PX4/Firmware#8644
This commit is contained in:
lijie
2018-01-12 11:13:04 +08:00
committed by Beat Küng
parent cdbca91e79
commit 32482e7644
4 changed files with 32 additions and 12 deletions
+21 -8
View File
@@ -45,19 +45,31 @@
DataValidatorGroup::DataValidatorGroup(unsigned siblings) :
_first(nullptr),
_last(nullptr),
_curr_best(-1),
_prev_best(-1),
_first_failover_time(0),
_toggle_count(0)
{
DataValidator *next = _first;
DataValidator *next = nullptr;
DataValidator *prev = nullptr;
for (unsigned i = 0; i < siblings; i++) {
next = new DataValidator(next);
next = new DataValidator();
if(i == 0) {
_first = next;
}
else {
prev->sibling(next);
}
prev = next;
}
_first = next;
_timeout_interval_us = _first->get_timeout();
_last = next;
if(_first) {
_timeout_interval_us = _first->get_timeout();
}
}
DataValidatorGroup::~DataValidatorGroup()
@@ -71,13 +83,14 @@ DataValidatorGroup::~DataValidatorGroup()
DataValidator *DataValidatorGroup::add_new_validator()
{
DataValidator *validator = new DataValidator(_first);
DataValidator *validator = new DataValidator();
if (!validator) {
return nullptr;
}
_first = validator;
_first->set_timeout(_timeout_interval_us);
return _first;
_last->sibling(validator);
_last = validator;
_last->set_timeout(_timeout_interval_us);
return _last;
}
void