AutoSkill 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.

install
source · Clone the upstream repo
git clone https://github.com/ECNU-ICALK/AutoSkill
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ECNU-ICALK/AutoSkill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/SkillBank/ConvSkill/english_gpt4_8_GLM4.7/c-heap-file-chunk-iterator-implementation" ~/.claude/skills/ecnu-icalk-autoskill-c-heap-file-chunk-iterator-implementation && rm -rf "$T"
manifest: SkillBank/ConvSkill/english_gpt4_8_GLM4.7/c-heap-file-chunk-iterator-implementation/SKILL.md
source content

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