#ifndef __LOADER_H__
#define __LOADER_H__

// 定义加密和解密的宏，实际调用do_encode函数
#define do_encrypt(ptr, len, key)	do_encode(ptr, len, key)
#define do_decrypt(ptr, len, key)	do_encode(ptr, len, key)

// 定义一个静态内联函数，用于实现32位值的循环左移操作
static inline unsigned int custom_rol32(unsigned int val, int n)
{
    // 循环左移n位，右移(32 - n)位，然后将两者的结果合并
    return ((val << n) | (val >> (32 - n)));
}

// 定义一个静态内联函数，用于执行编码操作
static inline void do_encode(void *ptr, unsigned int len, unsigned int key)
{
    // 当剩余长度大于键值长度时，继续执行编码操作
    while (len > sizeof(key)) {
        // 使用异或和循环左移操作对数据进行编码
        *(unsigned int *)ptr ^= custom_rol32(key ^ len, (len % 13));
        // 更新剩余长度和指针位置，准备处理下一部分数据
        len -= sizeof(key), ptr += sizeof(key);
    }
}

#endif