package parquet

import (
	
)

type OffsetIndex interface {
	// NumPages returns the number of pages in the offset index.
	NumPages() int

	// Offset returns the offset starting from the beginning of the file for the
	// page at the given index.
	Offset(int) int64

	// CompressedPageSize returns the size of the page at the given index
	// (in bytes).
	CompressedPageSize(int) int64

	// FirstRowIndex returns the the first row in the page at the given index.
	//
	// The returned row index is based on the row group that the page belongs
	// to, the first row has index zero.
	FirstRowIndex(int) int64
}

type fileOffsetIndex format.OffsetIndex

func ( *fileOffsetIndex) () int {
	return len(.PageLocations)
}

func ( *fileOffsetIndex) ( int) int64 {
	return .PageLocations[].Offset
}

func ( *fileOffsetIndex) ( int) int64 {
	return int64(.PageLocations[].CompressedPageSize)
}

func ( *fileOffsetIndex) ( int) int64 {
	return .PageLocations[].FirstRowIndex
}

type emptyOffsetIndex struct{}

func (emptyOffsetIndex) () int                { return 0 }
func (emptyOffsetIndex) (int) int64             { return 0 }
func (emptyOffsetIndex) (int) int64 { return 0 }
func (emptyOffsetIndex) (int) int64      { return 0 }

type booleanOffsetIndex struct{ page *booleanPage }

func ( booleanOffsetIndex) () int                { return 1 }
func ( booleanOffsetIndex) (int) int64             { return 0 }
func ( booleanOffsetIndex) (int) int64 { return .page.Size() }
func ( booleanOffsetIndex) (int) int64      { return 0 }

type int32OffsetIndex struct{ page *int32Page }

func ( int32OffsetIndex) () int                { return 1 }
func ( int32OffsetIndex) (int) int64             { return 0 }
func ( int32OffsetIndex) (int) int64 { return .page.Size() }
func ( int32OffsetIndex) (int) int64      { return 0 }

type int64OffsetIndex struct{ page *int64Page }

func ( int64OffsetIndex) () int                { return 1 }
func ( int64OffsetIndex) (int) int64             { return 0 }
func ( int64OffsetIndex) (int) int64 { return .page.Size() }
func ( int64OffsetIndex) (int) int64      { return 0 }

type int96OffsetIndex struct{ page *int96Page }

func ( int96OffsetIndex) () int                { return 1 }
func ( int96OffsetIndex) (int) int64             { return 0 }
func ( int96OffsetIndex) (int) int64 { return .page.Size() }
func ( int96OffsetIndex) (int) int64      { return 0 }

type floatOffsetIndex struct{ page *floatPage }

func ( floatOffsetIndex) () int                { return 1 }
func ( floatOffsetIndex) (int) int64             { return 0 }
func ( floatOffsetIndex) (int) int64 { return .page.Size() }
func ( floatOffsetIndex) (int) int64      { return 0 }

type doubleOffsetIndex struct{ page *doublePage }

func ( doubleOffsetIndex) () int                { return 1 }
func ( doubleOffsetIndex) (int) int64             { return 0 }
func ( doubleOffsetIndex) (int) int64 { return .page.Size() }
func ( doubleOffsetIndex) (int) int64      { return 0 }

type byteArrayOffsetIndex struct{ page *byteArrayPage }

func ( byteArrayOffsetIndex) () int                { return 1 }
func ( byteArrayOffsetIndex) (int) int64             { return 0 }
func ( byteArrayOffsetIndex) (int) int64 { return .page.Size() }
func ( byteArrayOffsetIndex) (int) int64      { return 0 }

type fixedLenByteArrayOffsetIndex struct{ page *fixedLenByteArrayPage }

func ( fixedLenByteArrayOffsetIndex) () int                { return 1 }
func ( fixedLenByteArrayOffsetIndex) (int) int64             { return 0 }
func ( fixedLenByteArrayOffsetIndex) (int) int64 { return .page.Size() }
func ( fixedLenByteArrayOffsetIndex) (int) int64      { return 0 }

type uint32OffsetIndex struct{ page *uint32Page }

func ( uint32OffsetIndex) () int                { return 1 }
func ( uint32OffsetIndex) (int) int64             { return 0 }
func ( uint32OffsetIndex) (int) int64 { return .page.Size() }
func ( uint32OffsetIndex) (int) int64      { return 0 }

type uint64OffsetIndex struct{ page *uint64Page }

func ( uint64OffsetIndex) () int                { return 1 }
func ( uint64OffsetIndex) (int) int64             { return 0 }
func ( uint64OffsetIndex) (int) int64 { return .page.Size() }
func ( uint64OffsetIndex) (int) int64      { return 0 }

type be128OffsetIndex struct{ page *be128Page }

func ( be128OffsetIndex) () int                { return 1 }
func ( be128OffsetIndex) (int) int64             { return 0 }
func ( be128OffsetIndex) (int) int64 { return .page.Size() }
func ( be128OffsetIndex) (int) int64      { return 0 }