mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-03-18 21:30:38 +01:00
31 lines
634 B
C++
31 lines
634 B
C++
#include <escher/responder.h>
|
|
#include <escher/container.h>
|
|
#include <assert.h>
|
|
|
|
|
|
Responder * Responder::commonAncestorWith(Responder * responder) {
|
|
if (responder == nullptr) {
|
|
return nullptr;
|
|
}
|
|
Responder * p = this;
|
|
while (p != nullptr) {
|
|
if (responder->hasAncestor(p)) {
|
|
return p;
|
|
}
|
|
p = p->parentResponder();
|
|
}
|
|
return nullptr;
|
|
}
|
|
|
|
bool Responder::hasAncestor(Responder * responder) const {
|
|
assert(responder != nullptr);
|
|
Responder * p = const_cast<Responder *>(this);
|
|
while (p != nullptr) {
|
|
if (p == responder) {
|
|
return true;
|
|
}
|
|
p = p->parentResponder();
|
|
}
|
|
return false;
|
|
}
|