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