// Copyright 2022 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package lcs

import (
	"fmt"
)

//	For each D, vec[D] has length D+1,
//
// and the label for (D, k) is stored in vec[D][(D+k)/2].
type label struct {
	vec [][]int
}

// Temporary checking DO NOT COMMIT true TO PRODUCTION CODE
const debug = false

// debugging. check that the (d,k) pair is valid
// (that is, -d<=k<=d and d+k even)
func checkDK(D, k int) {
	if k >= -D && k <= D && (D+k)%2 == 0 {
		return
	}
	panic(fmt.Sprintf("out of range, d=%d,k=%d", D, k))
}

func (t *label) set(D, k, x int) {
	if debug {
		checkDK(D, k)
	}
	for len(t.vec) <= D {
		t.vec = append(t.vec, nil)
	}
	if t.vec[D] == nil {
		t.vec[D] = make([]int, D+1)
	}
	t.vec[D][(D+k)/2] = x // known that D+k is even
}

func (t *label) get(d, k int) int {
	if debug {
		checkDK(d, k)
	}
	return int(t.vec[d][(d+k)/2])
}

func newtriang(limit int) label {
	if limit < 100 {
		// Preallocate if limit is not large.
		return label{vec: make([][]int, limit)}
	}
	return label{}
}
