Skip to content

Commit

Permalink
Performance|libcore: Faster destroying of audiences
Browse files Browse the repository at this point in the history
When an observer audience is being destroyed, there is no need to
clear the members first.
  • Loading branch information
skyjake committed Jun 26, 2016
1 parent a2b3e52 commit 794555d
Showing 1 changed file with 10 additions and 5 deletions.
15 changes: 10 additions & 5 deletions doomsday/sdk/libcore/include/de/data/observers.h
Expand Up @@ -59,7 +59,7 @@

#define DENG2_EXTERN_AUDIENCE(Name) \
typedef de::Observers<DENG2_AUDIENCE_INTERFACE(Name)> Name##Audience; \
extern Name##Audience audienceFor##Name;
DENG2_PUBLIC extern Name##Audience audienceFor##Name;

#define DENG2_DECLARE_AUDIENCE_METHOD(Name) \
typedef de::Observers<DENG2_AUDIENCE_INTERFACE(Name)> Name##Audience; \
Expand Down Expand Up @@ -278,14 +278,13 @@ class Observers : public Lockable, public IAudience
}

virtual ~Observers() {
clear();
DENG2_GUARD(this);
_disassociateAllMembers();
}

void clear() {
DENG2_GUARD(this);
for (Type *observer : _members) {
observer->removeMemberOf(*this);
}
_disassociateAllMembers();
_members.clear();
}

Expand Down Expand Up @@ -387,6 +386,12 @@ class Observers : public Lockable, public IAudience
void removeMember(ObserverBase *member) { _remove(static_cast<Type *>(member)); }

private:
void _disassociateAllMembers() {
for (Type *observer : _members) {
observer->removeMemberOf(*this);
}
}

void _add(Type *observer) {
DENG2_GUARD(this);
DENG2_ASSERT(observer != 0);
Expand Down

0 comments on commit 794555d

Please sign in to comment.