class SimpleDataPageIO extends AbstractDataPageIO<SimpleDataRow> {
    /** */
    public static final IOVersions<SimpleDataPageIO> VERSIONS = new IOVersions<>(
        new SimpleDataPageIO(1)
    );

    /**
     * @param ver Page format version.
     */
    public SimpleDataPageIO(int ver) {
        super(T_DATA_PART, ver);
    }

    /**
     * Constructor is intended for extending types.
     * @param type IO type.
     * @param ver Page format version.
     */
    public SimpleDataPageIO(int type, int ver) {
        super(type, ver);
    }

    /** {@inheritDoc} */
    @Override protected void writeFragmentData(
        final SimpleDataRow row,
        final ByteBuffer buf,
        final int rowOff,
        final int payloadSize
    ) throws IgniteCheckedException {
        assertPageType(buf);

        int written = writeSizeFragment(row, buf, rowOff, payloadSize);

        if (payloadSize == written)
            return;

        int start = rowOff > 4 ? rowOff - 4 : 0;

        final int len = Math.min(row.value().length - start, payloadSize - written);

        if (len > 0) {
            buf.put(row.value(), start, len);
            written += len;
        }

        assert written == payloadSize;
    }

    /** */
    private int writeSizeFragment(final SimpleDataRow row, final ByteBuffer buf, final int rowOff,
        final int payloadSize) {<FILL_FUNCTION_BODY>}

    /** {@inheritDoc} */
    @Override protected void writeRowData(
        long pageAddr,
        int dataOff,
        int payloadSize,
        SimpleDataRow row,
        boolean newRow
    ) throws IgniteCheckedException {
        assertPageType(pageAddr);

        long addr = pageAddr + dataOff;

        if (newRow)
            PageUtils.putShort(addr, 0, (short)payloadSize);

        PageUtils.putInt(addr, 2, row.value().length);
        PageUtils.putBytes(addr, 6, row.value());
    }

    /** {@inheritDoc} */
    @Override protected void printPage(long addr, int pageSize, GridStringBuilder sb) throws IgniteCheckedException {
        sb.a("SimpleDataPageIO [\n");
        printPageLayout(addr, pageSize, sb);
        sb.a("\n]");
    }
}

        final int size = 4;

        if (rowOff >= size)
            return 0;

        if (rowOff == 0 && payloadSize >= size) {
            buf.putInt(row.value().length);

            return size;
        }

        ByteBuffer buf2 = ByteBuffer.allocate(size);
        buf2.order(buf.order());

        buf2.putInt(row.value().length);
        int len = Math.min(size - rowOff, payloadSize);
        buf.put(buf2.array(), rowOff, len);

        return len;
    
<methods>public void addRow(long, long, org.apache.ignite.internal.processors.cache.persistence.freelist.SimpleDataRow, int, int) throws org.apache.ignite.IgniteCheckedException,public int addRow(long, byte[], int) throws org.apache.ignite.IgniteCheckedException,public int addRowFragment(org.apache.ignite.internal.pagemem.PageMemory, long, long, org.apache.ignite.internal.processors.cache.persistence.freelist.SimpleDataRow, int, int, int) throws org.apache.ignite.IgniteCheckedException,public void addRowFragment(long, long, byte[], long, int) throws org.apache.ignite.IgniteCheckedException,public void compactPage(java.nio.ByteBuffer, java.nio.ByteBuffer, int) ,public List<U> forAllItems(long, CC<U>) throws org.apache.ignite.IgniteCheckedException,public int getDirectCount(long) ,public long getFreeListPageId(long) ,public int getFreeSpace(int, long) ,public int getFreeSpace(long) ,public int getPayloadOffset(long, int, int, int) ,public int getRealFreeSpace(long) ,public int getRowsCount(long) ,public void initNewPage(long, long, int, org.apache.ignite.internal.processors.cache.persistence.pagemem.PageMetrics) ,public boolean isEmpty(long) ,public org.apache.ignite.internal.processors.cache.persistence.tree.io.DataPagePayload readPayload(long, int, int) ,public long removeRow(long, int, int) throws org.apache.ignite.IgniteCheckedException,public void restorePage(java.nio.ByteBuffer, int) ,public void setFreeListPageId(long, long) ,public boolean updateRow(long, int, int, byte[], org.apache.ignite.internal.processors.cache.persistence.freelist.SimpleDataRow, int) throws org.apache.ignite.IgniteCheckedException<variables>private static final int DIRECT_CNT_OFF,private static final int FIRST_ENTRY_OFF,private static final int FRAGMENTED_FLAG,private static final int FREE_LIST_PAGE_ID_OFF,private static final int FREE_SPACE_OFF,private static final int INDIRECT_CNT_OFF,public static final int ITEMS_OFF,public static final int ITEM_SIZE,public static final int LINK_SIZE,public static final int MIN_DATA_PAGE_OVERHEAD,public static final int PAYLOAD_LEN_SIZE,private static final int SHOW_ITEM,private static final int SHOW_LINK,private static final int SHOW_PAYLOAD_LEN