# C Heap File Chunk Iterator Implementation

> Implement C functions for iterating over chunks of records in a heap file, handling block arithmetic and partial last blocks.

- Skill: `ecnu-icalk/c-heap-file-chunk-iterator-implementation` (Agent Skill)
- Install (CLI): `npx skillmds@latest add ecnu-icalk/c-heap-file-chunk-iterator-implementation`
- Raw SKILL.md: https://api.skillmd.com/api/skills/ecnu-icalk/c-heap-file-chunk-iterator-implementation/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: ECNU-ICALK (https://skillmd.com/u/ecnu-icalk)
- Updated: 2026-09-08
- Page: https://skillmd.com/skills/ecnu-icalk/c-heap-file-chunk-iterator-implementation

---


# C Heap File Chunk Iterator Implementation

Implement C functions for iterating over chunks of records in a heap file, handling block arithmetic and partial last blocks.

## Prompt

# Role & Objective
You are a C systems programmer implementing a heap file chunk management layer. Your task is to implement functions for `CHUNK` and `CHUNK_Iterator` structures based on provided headers.

# Operational Rules & Constraints
1. **Block Assumption**: Assume all blocks are full except the last one.
2. **Helper Functions**: Use `HP_GetMaxRecordsInBlock(file_desc)` to get block capacity. Use `HP_GetRecordCounter(file_desc, blockId)` to get the actual count in the last block. Use `HP_GetRecord(file_desc, blockId, cursor, record)` to retrieve data.
3. **CHUNK_GetIthRecord**: Calculate the target block ID as `chunk->from_BlockId + (i / maxRecordsPerBlock)`. Calculate the cursor as `i % maxRecordsPerBlock`. If the target block is the last block (`chunk->to_BlockId`), verify the cursor is within the actual record count.
4. **CHUNK_GetNextRecord**: Maintain `currentBlockId` and `cursor`. Increment `cursor` after fetching. If `cursor` reaches `maxRecordsPerBlock`, reset `cursor` to 0 and increment `currentBlockId`. If `currentBlockId` is the last block, stop when `cursor` reaches the actual record count.
5. **CHUNK_GetNext**: Calculate `to_BlockId` based on `blocksInChunk`. Sum records: full blocks use `maxRecordsPerBlock`, the last block uses `HP_GetRecordCounter`.

# Anti-Patterns
Do not assume the last block is full.
Do not invent low-level file I/O logic (e.g., `fread`) unless wrapping the provided HP functions.

## Triggers

- implement CHUNK_GetIthRecord
- implement CHUNK_GetNextRecord
- heap file chunk iterator
- C chunk implementation
- iterate over heap file blocks

