1//
2// Index.h
3// CoreEntitlements
4//
5//
6
7#ifndef CORE_ENTITLEMENTS_INDEX_H
8#define CORE_ENTITLEMENTS_INDEX_H
9
10#ifndef _CE_INDIRECT
11#error "Please include <CoreEntitlements/CoreEntitlements.h> instead of this file"
12#endif
13
14#include <CoreEntitlements/Result.h>
15
16/*
17 The kernel always supports acceleration
18 */
19#define CE_ACCELERATION_SUPPORTED 1
20
21
22/*!
23 @typedef CEAccelerationElement_t
24
25 A single element of the acceleration structure, the contents of this struct are an implementation detail
26 and are subject to change.
27 */
28typedef struct CEAccelerationElement {
29 uint32_t key_offset;
30 uint32_t key_length;
31} CEAccelerationElement_t;
32
33/*!
34 @struct CEAccelerationContext
35
36 Contains data required to accelerate queries, the contents of this struct are an implementation detail
37 and are subject to change.
38 */
39struct CEAccelerationContext {
40 CEAccelerationElement_t * __counted_by(index_count) index;
41 size_t index_count;
42};
43
44/*!
45 @function CEIndexSizeForContext
46 Computes an upper bound of memory needed to construct an acceleration index for a particular query context.
47
48 @param context
49 The context for which the calculation should be made
50
51 @param size
52 Contains the required size, in bytes.
53
54 @returns an error if the context cannot be accelerated, success otherwise
55 */
56CEError_t CEIndexSizeForContext(CEQueryContext_t context, size_t* size);
57
58/*!
59 @function CEBuildIndexForContext
60 Computes and stores and acceleration index into the passed in context.
61 Building an index requires runtime support.
62
63 @param context
64 The context for which the index should be computed.
65 */
66CEError_t CEBuildIndexForContext(CEQueryContext_t context);
67
68/*!
69 @function CEFreeIndexForContext
70 Frees an index associated with a query context
71
72 @param context
73 The context for which the index should be freed.
74 */
75CEError_t CEFreeIndexForContext(CEQueryContext_t context);
76
77/*!
78 @function CEContextIsAccelerated
79 Checks if the passed in context supports query acceleration
80
81 @param context
82 The context to check.
83 */
84bool CEContextIsAccelerated(CEQueryContext_t context);
85
86#endif /* CORE_ENTITLEMENTS_INDEX_H */
87