-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDKSet.h
More file actions
105 lines (73 loc) · 4.27 KB
/
Copy pathDKSet.h
File metadata and controls
105 lines (73 loc) · 4.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
// =======================================================================================
//
// DKSet.h
// Duck Object Library -- See LICENSE for legal information.
//
// Copyright (c) 2014-2026 Derek W. Nylen
//
// =======================================================================================
#ifndef _DK_SET_H_
#define _DK_SET_H_
#ifdef __cplusplus
extern "C"
{
#endif
DK_API DKDeclareInterfaceSelector( Set );
//typedef DKObjectRef DKSetRef; -- Declared in DKPlatform.h
typedef DKObjectRef DKMutableSetRef;
typedef int (*DKSetApplierFunction)( DKObjectRef object, void * context );
typedef DKObjectRef (*DKSetInitWithVAObjectsMethod)( DKSetRef _self, va_list objects );
typedef DKObjectRef (*DKSetInitWithCArrayMethod)( DKSetRef _self, DKObjectRef objects[], DKIndex count );
typedef DKObjectRef (*DKSetInitWithCollectionMethod)( DKSetRef _self, DKObjectRef srcCollection );
typedef DKObjectRef (*DKSetGetMemberMethod)( DKSetRef _self, DKObjectRef object );
typedef void (*DKSetAddObjectMethod)( DKMutableSetRef _self, DKObjectRef object );
typedef void (*DKSetRemoveObjectMethod)( DKMutableSetRef _self, DKObjectRef object );
typedef void (*DKSetRemoveAllObjectsMethod)( DKMutableSetRef _self );
struct DKSetInterface
{
const DKInterface _interface;
DKSetInitWithVAObjectsMethod initWithVAObjects;
DKSetInitWithCArrayMethod initWithCArray;
DKSetInitWithCollectionMethod initWithCollection;
DKGetCountMethod getCount;
DKSetGetMemberMethod getMember;
// Mutable Sets -- these raise errors when called on immutable sets
DKSetAddObjectMethod addObject;
DKSetRemoveObjectMethod removeObject;
DKSetRemoveAllObjectsMethod removeAllObjects;
};
typedef const struct DKSetInterface * DKSetInterfaceRef;
DK_API DKClassRef DKSetClass( void );
DK_API void DKSetDefaultSetClass( DKClassRef _self );
DK_API DKClassRef DKMutableSetClass( void );
DK_API void DKSetDefaultMutableSetClass( DKClassRef _self );
#define DKEmptySet() DKAutorelease( DKNew( DKSetClass() ) )
#define DKMutableSet() DKAutorelease( DKNew( DKMutableSetClass() ) )
#define DKSetWithObject( object ) DKAutorelease( DKSetInitWithObject( DKAlloc( DKSetClass() ), object ) )
#define DKSetWithObjects( ... ) DKAutorelease( DKSetInitWithObjects( DKAlloc( DKSetClass() ), __VA_ARGS__, NULL ) )
#define DKSetWithVAObjects( objects ) DKAutorelease( DKSetInitWithVAObjects( DKAlloc( DKSetClass() ), objects ) )
#define DKSetWithCArray( objects, count ) DKAutorelease( DKSetInitWithCArray( DKAlloc( DKSetClass() ), objects, count ) )
#define DKSetWithCollection( collection ) DKAutorelease( DKSetInitWithCollection( DKAlloc( DKSetClass() ), collection ) )
#define DKNewMutableSet() DKNew( DKMutableSetClass() )
DK_API DKObjectRef DKSetInitWithObject( DKSetRef _self, DKObjectRef object );
DK_API DKObjectRef DKSetInitWithObjects( DKSetRef _self, ... );
DK_API DKObjectRef DKSetInitWithVAObjects( DKSetRef _self, va_list objects );
DK_API DKObjectRef DKSetInitWithCArray( DKSetRef _self, DKObjectRef objects[], DKIndex count );
DK_API DKObjectRef DKSetInitWithCollection( DKSetRef _self, DKObjectRef srcCollection );
DK_API DKIndex DKSetGetCount( DKSetRef _self );
DK_API DKObjectRef DKSetGetMember( DKSetRef _self, DKObjectRef object );
DK_API bool DKSetContainsObject( DKSetRef _self, DKObjectRef object );
DK_API DKListRef DKSetGetAllObjects( DKDictionaryRef _self );
DK_API void DKSetAddObject( DKMutableSetRef _self, DKObjectRef object );
DK_API void DKSetRemoveObject( DKMutableSetRef _self, DKObjectRef object );
DK_API void DKSetRemoveAllObjects( DKMutableSetRef _self );
DK_API bool DKSetEqualToSet( DKSetRef _self, DKSetRef otherSet );
DK_API int DKSetIsSubsetOfSet( DKSetRef _self, DKSetRef otherSet );
DK_API int DKSetIntersectsSet( DKSetRef _self, DKSetRef otherSet );
DK_API void DKSetUnion( DKMutableSetRef _self, DKSetRef otherSet );
DK_API void DKSetMinus( DKMutableSetRef _self, DKSetRef otherSet );
DK_API void DKSetIntersect( DKMutableSetRef _self, DKSetRef otherSet );
#ifdef __cplusplus
}
#endif
#endif // _DK_SET_H_