Merge branch 'master' into jgrpp
# Conflicts: # cmake/CompileFlags.cmake # src/crashlog.cpp # src/fileio.cpp # src/fileio_func.h # src/fios_gui.cpp # src/ini_load.cpp # src/ini_type.h # src/lang/english.txt # src/lang/german.txt # src/lang/korean.txt # src/network/network_client.cpp # src/order_base.h # src/order_cmd.cpp # src/os/windows/win32.cpp # src/road_cmd.cpp # src/saveload/saveload.cpp # src/saveload/saveload.h # src/settings.cpp # src/station_cmd.cpp # src/stdafx.h # src/table/settings.ini # src/tree_cmd.cpp # src/tree_gui.cpp # src/vehicle_base.h # src/video/cocoa/cocoa_v.mm # src/video/cocoa/event.mm # src/video/cocoa/wnd_quartz.mm # src/viewport.cpp # src/widgets/tree_widget.h
This commit is contained in:
@@ -1123,6 +1123,55 @@ public:
|
||||
}
|
||||
|
||||
char *DumpVehicleFlags(char *b, const char *last, bool include_tile) const;
|
||||
|
||||
/**
|
||||
* 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); }
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user