[qwaq] Extend Array makeObjectsPerform methods

Added conditional message sending and reversed traversal of the array.
This commit is contained in:
Bill Currie 2020-03-06 11:27:31 +09:00
parent ad4cde15b5
commit 6bf2fd546d
2 changed files with 86 additions and 1 deletions

View file

@ -1,9 +1,31 @@
#ifndef __qwaq_group_h
#define __qwaq_group_h
#include <Array.h>
#include "qwaq-view.h"
@class Array;
typedef BOOL condition_func (id object, void *data);
typedef BOOL condition_func2 (id object, void *anObject, void *data);
@interface Array (Group)
- (void) makeObjectsPerformSelector: (SEL)selector
if: (condition_func)condition
with: (void *)data;
- (void) makeObjectsPerformSelector: (SEL)selector
withObject: (void *)anObject
if: (condition_func2)condition
with: (void *)data;
- (void) makeReversedObjectsPerformSelector: (SEL)selector;
- (void) makeReversedObjectsPerformSelector: (SEL)selector
withObject: (void *)anObject;
- (void) makeReversedObjectsPerformSelector: (SEL)selector
if: (condition_func)condition
with: (void *)data;
- (void) makeReversedObjectsPerformSelector: (SEL)selector
withObject: (void *)anObject
if: (condition_func2)condition
with: (void *)data;
@end
@interface Group : View
{

View file

@ -2,6 +2,69 @@
#include "event.h"
#include "qwaq-group.h"
@implementation Array (Group)
- (void) makeObjectsPerformSelector: (SEL)selector
if: (condition_func)condition
with: (void *)data
{
for (int i = 0; i < [self count]; i++) {
if (condition (_objs[i], data)) {
[_objs[i] performSelector: selector];
}
}
}
- (void) makeObjectsPerformSelector: (SEL)selector
withObject: (void *)anObject
if: (condition_func2)condition
with: (void *)data
{
for (int i = 0; i < [self count]; i++) {
if (condition (_objs[i], anObject, data)) {
[_objs[i] performSelector: selector withObject: anObject];
}
}
}
- (void) makeReversedObjectsPerformSelector: (SEL)selector
{
for (int i = [self count]; i-->0; ) {
[_objs[i] performSelector: selector];
}
}
- (void) makeReversedObjectsPerformSelector: (SEL)selector
withObject: (void *)anObject
{
for (int i = [self count]; i-->0; ) {
[_objs[i] performSelector: selector withObject: anObject];
}
}
- (void) makeReversedObjectsPerformSelector: (SEL)selector
if: (condition_func)condition
with: (void *)data
{
for (int i = [self count]; i-->0; ) {
if (condition (_objs[i], data)) {
[_objs[i] performSelector: selector];
}
}
}
- (void) makeReversedObjectsPerformSelector: (SEL)selector
withObject: (void *)anObject
if: (condition_func2)condition
with: (void *)data
{
for (int i = [self count]; i-->0; ) {
if (condition (_objs[i], anObject, data)) {
[_objs[i] performSelector: selector withObject: anObject];
}
}
}
@end
@implementation Group
-init
{