#pragma once /* * box/tiny_next_ptr_box.h * * Tiny next-pointer Box API (thin wrapper over tiny_nextptr.h) * * このヘッダは Phase E1-CORRECT で確定した next オフセット仕様に従い、 * すべての tiny freelist / TLS / fast-cache / refill / SLL が経由すべき * 「唯一の Box API」を提供する。 * * 仕様は tiny_nextptr.h と完全一致: * * HAKMEM_TINY_HEADER_CLASSIDX != 0: * - Class 0-6: next_off = 1 (headerを保持) * - Class 7: next_off = 0 (free中は header を潰す) * * HAKMEM_TINY_HEADER_CLASSIDX == 0: * - 全クラス: next_off = 0 * * 呼び出し規約: * - base: 「内部 box 基底 (header位置または従来base)」 * - class_idx: size class index (0-7) * * 禁止事項: * - ここを通さずに next オフセットを手計算すること * - 直接 *(void**) で next を読む/書くこと */ #include #include "hakmem_tiny_config.h" #include "tiny_nextptr.h" #ifdef __cplusplus extern "C" { #endif // Box API: write next pointer static inline void tiny_next_write(int class_idx, void *base, void *next_value) { tiny_next_store(base, class_idx, next_value); } // Box API: read next pointer static inline void *tiny_next_read(int class_idx, const void *base) { return tiny_next_load(base, class_idx); } /* * Greppable macros: * - 既存コードは TINY_NEXT_READ/WRITE か tiny_next_read/write を使う。 * - これらから tiny_nextptr.h 実装へ一元的に到達する。 */ #define TINY_NEXT_WRITE(cls_, base_, next_) tiny_next_write((cls_), (base_), (next_)) #define TINY_NEXT_READ(cls_, base_) tiny_next_read((cls_), (base_)) #ifdef __cplusplus } #endif