diff options
author | glx22 <glx@openttd.org> | 2020-12-27 00:13:56 +0100 |
---|---|---|
committer | Charles Pigott <charlespigott@googlemail.com> | 2020-12-27 10:28:46 +0000 |
commit | d8605ad18da2a00fceb72b38325374b341ac6f16 (patch) | |
tree | 8a6d33a6e57c2bc6a51cfe18443510c3b6a7bdbe /src/vehicle_base.h | |
parent | 1478fa93b344fc25000725dd143109e4def24f0b (diff) | |
download | openttd-d8605ad18da2a00fceb72b38325374b341ac6f16.tar.xz |
Codechange: Replace FOR_VEHICLE_ORDERS with range-based for loops
Diffstat (limited to 'src/vehicle_base.h')
-rw-r--r-- | src/vehicle_base.h | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/vehicle_base.h b/src/vehicle_base.h index bc72c6bbf..019c94a29 100644 --- a/src/vehicle_base.h +++ b/src/vehicle_base.h @@ -969,6 +969,55 @@ public: return v; } + + /** + * Iterator to iterate orders + * Supports deletion of current order + */ + struct OrderIterator { + typedef Order value_type; + typedef Order* pointer; + typedef Order& reference; + typedef size_t difference_type; + typedef std::forward_iterator_tag iterator_category; + + explicit OrderIterator(OrderList *list) : list(list), prev(nullptr) + { + this->order = (this->list == nullptr) ? nullptr : this->list->GetFirstOrder(); + } + + bool operator==(const OrderIterator &other) const { return this->order == other.order; } + bool operator!=(const OrderIterator &other) const { return !(*this == other); } + Order * operator*() const { return this->order; } + OrderIterator & operator++() + { + this->prev = (this->prev == nullptr) ? this->list->GetFirstOrder() : this->prev->next; + this->order = (this->prev == nullptr) ? nullptr : this->prev->next; + return *this; + } + + private: + OrderList *list; + Order *order; + Order *prev; + }; + + /** + * Iterable ensemble of orders + */ + struct IterateWrapper { + OrderList *list; + IterateWrapper(OrderList *list = nullptr) : list(list) {} + OrderIterator begin() { return OrderIterator(this->list); } + OrderIterator end() { return OrderIterator(nullptr); } + bool empty() { return this->begin() == this->end(); } + }; + + /** + * Returns an iterable ensemble of orders of a vehicle + * @return an iterable ensemble of orders of a vehicle + */ + IterateWrapper Orders() const { return IterateWrapper(this->orders.list); } }; /** |