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