19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
#include <string.h>
#import "runtime.h"
#import "runtime-private.h"
@implementation Protocol
@end
BOOL
class_conformsToProtocol(Class cls, Protocol *p)
{
struct objc_protocol_list *pl;
struct objc_category **cats;
long i, j;
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
#include <string.h>
#import "runtime.h"
#import "runtime-private.h"
@implementation Protocol
@end
inline const char*
protocol_getName(Protocol *p)
{
return p->name;
}
inline BOOL
protocol_isEqual(Protocol *a, Protocol *b)
{
return !strcmp(protocol_getName(a), protocol_getName(b));
}
BOOL
protocol_conformsToProtocol(Protocol *a, Protocol *b)
{
struct objc_protocol_list *pl;
size_t i;
if (protocol_isEqual(a, b))
return YES;
for (pl = a->protocol_list; pl != NULL; pl = pl->next)
for (i = 0; i < pl->count; i++)
if (protocol_conformsToProtocol(pl->list[i], b))
return YES;
return NO;
}
BOOL
class_conformsToProtocol(Class cls, Protocol *p)
{
struct objc_protocol_list *pl;
struct objc_category **cats;
long i, j;
|