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