platform: auto-register figments, now that we have json config
This commit is contained in:
@@ -54,6 +54,29 @@ class Platform : public Task {
|
||||
}
|
||||
}
|
||||
|
||||
struct figment_iterator: public std::iterator<std::input_iterator_tag, Figment*> {
|
||||
TaskRegistration* cur;
|
||||
explicit figment_iterator() : cur(NULL) {}
|
||||
explicit figment_iterator(TaskRegistration* head) : cur(head) {
|
||||
while (cur && !cur->task->isFigment()) {
|
||||
cur = cur->next;
|
||||
}
|
||||
}
|
||||
figment_iterator& operator++() {
|
||||
if (cur) {
|
||||
do {
|
||||
cur = cur->next;
|
||||
} while (cur && !cur->task->isFigment());
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
figment_iterator operator++(int) {figment_iterator ret = *this; ++(*this); return ret;}
|
||||
bool operator==(figment_iterator other) const { return cur == other.cur; }
|
||||
bool operator!=(figment_iterator other) const { return !(*this == other); }
|
||||
Figment* operator*() const { return static_cast<Figment*>(cur->task); }
|
||||
};
|
||||
|
||||
struct task_iterator: public std::iterator<std::input_iterator_tag, Task*> {
|
||||
TaskRegistration* cur;
|
||||
explicit task_iterator() : cur(NULL) {}
|
||||
@@ -71,6 +94,14 @@ class Platform : public Task {
|
||||
Task* operator*() const { return cur->task; }
|
||||
};
|
||||
|
||||
static figment_iterator beginFigments() {
|
||||
return figment_iterator(firstTask);
|
||||
}
|
||||
|
||||
static figment_iterator endFigments() {
|
||||
return figment_iterator(NULL);
|
||||
}
|
||||
|
||||
static task_iterator beginTasks() {
|
||||
return task_iterator(firstTask);
|
||||
}
|
||||
|
Reference in New Issue
Block a user