dvander@2226: #ifndef _INCLUDE_KNIGHT_KE_CODE_ALLOCATOR_H_ dvander@2226: #define _INCLUDE_KNIGHT_KE_CODE_ALLOCATOR_H_ dvander@2226: dvander@2226: #include dvander@2226: #include dvander@2226: dvander@2226: namespace Knight dvander@2226: { dvander@2226: class KeCodeCache; dvander@2226: dvander@2226: /** dvander@2226: * @brief Creates a new code cache/allocator. dvander@2226: * dvander@2226: * @return New code cache allocator. dvander@2226: */ dvander@2226: extern KeCodeCache *KE_CreateCodeCache(); dvander@2226: dvander@2226: /** dvander@2226: * @brief Destroys a code cache allocator. dvander@2226: * dvander@2226: * @param cache Code cache object. dvander@2226: */ dvander@2226: extern void KE_DestroyCodeCache(KeCodeCache *cache); dvander@2226: dvander@2226: /** dvander@2226: * @brief Allocates code memory that is readable, writable, dvander@2226: * and executable. dvander@2226: * dvander@2226: * The address returned wlil be aligned, minimally, on a 16-byte dvander@2226: * boundary. dvander@2226: * dvander@2226: * @param cache Code cache object. dvander@2226: * @param size Amount of memory needed. dvander@2226: * @return Address pointing to the memory. dvander@2226: */ dvander@2226: extern void *KE_AllocCode(KeCodeCache *cache, size_t size); dvander@2226: dvander@2226: /** dvander@2226: * @brief Frees code memory. dvander@2226: * dvander@2226: * @param cache Code cache object. dvander@2226: * @param code Address of code memory. dvander@2226: */ dvander@2226: extern void KE_FreeCode(KeCodeCache *cache, void *code); dvander@2226: } dvander@2226: dvander@2226: #endif //_INCLUDE_KNIGHT_KE_CODE_ALLOCATOR_H_