// SPDX-License-Identifier: Unlicense OR BSD-3-Clause

package cff

import (
	
	
)

// Code generated by binarygen from cff2_src.go. DO NOT EDIT

func ( *header2) ( []byte) {
	_ = [4] // early bound checking
	.majorVersion = [0]
	.minorVersion = [1]
	.headerSize = [2]
	.topDictLength = binary.BigEndian.Uint16([3:])
}

func ( *indexStart) ( []byte) {
	_ = [4] // early bound checking
	.count = binary.BigEndian.Uint32([0:])
	.offSize = [4]
}

func parseFdSelect( []byte,  int) (fdSelect, int, error) {
	var  fdSelect

	if  := len();  < 1 {
		return , 0, fmt.Errorf("reading fdSelect: "+"EOF: expected length: 1, got %d", )
	}
	 := uint8([0])
	var (
		 int
		  error
	)
	switch  {
	case 0:
		, ,  = parseFdSelect0([0:], )
	case 3:
		, ,  = parseFdSelect3([0:])
	case 4:
		, ,  = parseFdSelect4([0:])
	default:
		 = fmt.Errorf("unsupported fdSelect format %d", )
	}
	if  != nil {
		return , 0, fmt.Errorf("reading fdSelect: %s", )
	}

	return , , nil
}

func parseFdSelect0( []byte,  int) (fdSelect0, int, error) {
	var  fdSelect0
	 := 0
	if  := len();  < 1 {
		return , 0, fmt.Errorf("reading fdSelect0: "+"EOF: expected length: 1, got %d", )
	}
	.format = [0]
	 += 1

	{

		 := int(1 + )
		if len() <  {
			return , 0, fmt.Errorf("reading fdSelect0: "+"EOF: expected length: %d, got %d", , len())
		}
		.fds = [1:]
		 = 
	}
	return , , nil
}

func parseFdSelect3( []byte) (fdSelect3, int, error) {
	var  fdSelect3
	 := 0
	if  := len();  < 3 {
		return , 0, fmt.Errorf("reading fdSelect3: "+"EOF: expected length: 3, got %d", )
	}
	_ = [2] // early bound checking
	.format = [0]
	.nRanges = binary.BigEndian.Uint16([1:])
	 += 3

	{
		 := int(.nRanges)

		if  := len();  < 3+*3 {
			return , 0, fmt.Errorf("reading fdSelect3: "+"EOF: expected length: %d, got %d", 3+*3, )
		}

		.ranges = make([]range3, ) // allocation guarded by the previous check
		for  := range .ranges {
			.ranges[].mustParse([3+*3:])
		}
		 +=  * 3
	}
	if  := len();  < +2 {
		return , 0, fmt.Errorf("reading fdSelect3: "+"EOF: expected length: n + 2, got %d", )
	}
	.sentinel = binary.BigEndian.Uint16([:])
	 += 2

	return , , nil
}

func parseFdSelect4( []byte) (fdSelect4, int, error) {
	var  fdSelect4
	 := 0
	if  := len();  < 5 {
		return , 0, fmt.Errorf("reading fdSelect4: "+"EOF: expected length: 5, got %d", )
	}
	_ = [4] // early bound checking
	.format = [0]
	.nRanges = binary.BigEndian.Uint32([1:])
	 += 5

	{
		 := int(.nRanges)

		if  := len();  < 5+*6 {
			return , 0, fmt.Errorf("reading fdSelect4: "+"EOF: expected length: %d, got %d", 5+*6, )
		}

		.ranges = make([]range4, ) // allocation guarded by the previous check
		for  := range .ranges {
			.ranges[].mustParse([5+*6:])
		}
		 +=  * 6
	}
	if  := len();  < +4 {
		return , 0, fmt.Errorf("reading fdSelect4: "+"EOF: expected length: n + 4, got %d", )
	}
	.sentinel = binary.BigEndian.Uint32([:])
	 += 4

	return , , nil
}

func ( *range3) ( []byte) {
	_ = [2] // early bound checking
	.first = binary.BigEndian.Uint16([0:])
	.fd = [2]
}

func ( *range4) ( []byte) {
	_ = [5] // early bound checking
	.first = binary.BigEndian.Uint32([0:])
	.fd = binary.BigEndian.Uint16([4:])
}