mirror of
https://github.com/duke-git/lancet.git
synced 2025-09-28 04:12:14 +08:00
204 lines
5.8 KiB
Go
204 lines
5.8 KiB
Go
// Copyright 2023 dudaodong@gmail.com. All rights reserved.
|
|
// Use of this source code is governed by MIT license
|
|
|
|
// Package tuple implements tuple data type and some operations on it.
|
|
package tuple
|
|
|
|
// Tuple2 represents a 2 elemnets tuple
|
|
type Tuple2[A any, B any] struct {
|
|
FieldA A
|
|
FieldB B
|
|
}
|
|
|
|
// Unbox returns values in tuple.
|
|
// Play: todo
|
|
func (t Tuple2[A, B]) Unbox() (A, B) {
|
|
return t.FieldA, t.FieldB
|
|
}
|
|
|
|
// NewTuple2 creates a 2 elemnets tuple from a list of values.
|
|
// Play: todo
|
|
func NewTuple2[A any, B any](a A, b B) Tuple2[A, B] {
|
|
return Tuple2[A, B]{FieldA: a, FieldB: b}
|
|
}
|
|
|
|
// Tuple3 represents a 3 elemnets tuple
|
|
type Tuple3[A any, B any, C any] struct {
|
|
FieldA A
|
|
FieldB B
|
|
FieldC C
|
|
}
|
|
|
|
// Unbox returns values in tuple.
|
|
// Play: todo
|
|
func (t Tuple3[A, B, C]) Unbox() (A, B, C) {
|
|
return t.FieldA, t.FieldB, t.FieldC
|
|
}
|
|
|
|
// NewTuple3 creates a 3 elemnets tuple from a list of values.
|
|
// Play: todo
|
|
func NewTuple3[A any, B any, C any](a A, b B, c C) Tuple3[A, B, C] {
|
|
return Tuple3[A, B, C]{FieldA: a, FieldB: b, FieldC: c}
|
|
}
|
|
|
|
// Tuple4 represents a 4 elemnets tuple
|
|
type Tuple4[A any, B any, C any, D any] struct {
|
|
FieldA A
|
|
FieldB B
|
|
FieldC C
|
|
FieldD D
|
|
}
|
|
|
|
// Unbox returns values in tuple.
|
|
// Play: todo
|
|
func (t Tuple4[A, B, C, D]) Unbox() (A, B, C, D) {
|
|
return t.FieldA, t.FieldB, t.FieldC, t.FieldD
|
|
}
|
|
|
|
// NewTuple4 creates a 4 elemnets tuple from a list of values.
|
|
// Play: todo
|
|
func NewTuple4[A any, B any, C any, D any](a A, b B, c C, d D) Tuple4[A, B, C, D] {
|
|
return Tuple4[A, B, C, D]{FieldA: a, FieldB: b, FieldC: c, FieldD: d}
|
|
}
|
|
|
|
// Tuple5 represents a 5 elemnets tuple
|
|
type Tuple5[A any, B any, C any, D any, E any] struct {
|
|
FieldA A
|
|
FieldB B
|
|
FieldC C
|
|
FieldD D
|
|
FieldE E
|
|
}
|
|
|
|
// Unbox returns values in tuple.
|
|
// Play: todo
|
|
func (t Tuple5[A, B, C, D, E]) Unbox() (A, B, C, D, E) {
|
|
return t.FieldA, t.FieldB, t.FieldC, t.FieldD, t.FieldE
|
|
}
|
|
|
|
// NewTuple5 creates a 5 elemnets tuple from a list of values.
|
|
// Play: todo
|
|
func NewTuple5[A any, B any, C any, D any, E any](a A, b B, c C, d D, e E) Tuple5[A, B, C, D, E] {
|
|
return Tuple5[A, B, C, D, E]{FieldA: a, FieldB: b, FieldC: c, FieldD: d, FieldE: e}
|
|
}
|
|
|
|
// Tuple6 represents a 6 elemnets tuple
|
|
type Tuple6[A any, B any, C any, D any, E any, F any] struct {
|
|
FieldA A
|
|
FieldB B
|
|
FieldC C
|
|
FieldD D
|
|
FieldE E
|
|
FieldF F
|
|
}
|
|
|
|
// Unbox returns values in tuple.
|
|
// Play: todo
|
|
func (t Tuple6[A, B, C, D, E, F]) Unbox() (A, B, C, D, E, F) {
|
|
return t.FieldA, t.FieldB, t.FieldC, t.FieldD, t.FieldE, t.FieldF
|
|
}
|
|
|
|
// NewTuple6 creates a 6 elemnets tuple from a list of values.
|
|
// Play: todo
|
|
func NewTuple6[A any, B any, C any, D any, E any, F any](a A, b B, c C, d D, e E, f F) Tuple6[A, B, C, D, E, F] {
|
|
return Tuple6[A, B, C, D, E, F]{FieldA: a, FieldB: b, FieldC: c, FieldD: d, FieldE: e, FieldF: f}
|
|
}
|
|
|
|
// Tuple7 represents a 7 elemnets tuple
|
|
type Tuple7[A any, B any, C any, D any, E any, F any, G any] struct {
|
|
FieldA A
|
|
FieldB B
|
|
FieldC C
|
|
FieldD D
|
|
FieldE E
|
|
FieldF F
|
|
FieldG G
|
|
}
|
|
|
|
// Unbox returns values in tuple.
|
|
// Play: todo
|
|
func (t Tuple7[A, B, C, D, E, F, G]) Unbox() (A, B, C, D, E, F, G) {
|
|
return t.FieldA, t.FieldB, t.FieldC, t.FieldD, t.FieldE, t.FieldF, t.FieldG
|
|
}
|
|
|
|
// NewTuple7 creates a 7 elemnets tuple from a list of values.
|
|
// Play: todo
|
|
func NewTuple7[A any, B any, C any, D any, E any, F any, G any](a A, b B, c C, d D, e E, f F, g G) Tuple7[A, B, C, D, E, F, G] {
|
|
return Tuple7[A, B, C, D, E, F, G]{FieldA: a, FieldB: b, FieldC: c, FieldD: d, FieldE: e, FieldF: f, FieldG: g}
|
|
}
|
|
|
|
// Tuple8 represents a 8 elemnets tuple
|
|
type Tuple8[A any, B any, C any, D any, E any, F any, G any, H any] struct {
|
|
FieldA A
|
|
FieldB B
|
|
FieldC C
|
|
FieldD D
|
|
FieldE E
|
|
FieldF F
|
|
FieldG G
|
|
FieldH H
|
|
}
|
|
|
|
// Unbox returns values in tuple.
|
|
// Play: todo
|
|
func (t Tuple8[A, B, C, D, E, F, G, H]) Unbox() (A, B, C, D, E, F, G, H) {
|
|
return t.FieldA, t.FieldB, t.FieldC, t.FieldD, t.FieldE, t.FieldF, t.FieldG, t.FieldH
|
|
}
|
|
|
|
// NewTuple8 creates a 8 elemnets tuple from a list of values.
|
|
// Play: todo
|
|
func NewTuple8[A any, B any, C any, D any, E any, F any, G any, H any](a A, b B, c C, d D, e E, f F, g G, h H) Tuple8[A, B, C, D, E, F, G, H] {
|
|
return Tuple8[A, B, C, D, E, F, G, H]{FieldA: a, FieldB: b, FieldC: c, FieldD: d, FieldE: e, FieldF: f, FieldG: g, FieldH: h}
|
|
}
|
|
|
|
// Tuple9 represents a 9 elemnets tuple
|
|
type Tuple9[A any, B any, C any, D any, E any, F any, G any, H any, I any] struct {
|
|
FieldA A
|
|
FieldB B
|
|
FieldC C
|
|
FieldD D
|
|
FieldE E
|
|
FieldF F
|
|
FieldG G
|
|
FieldH H
|
|
FieldI I
|
|
}
|
|
|
|
// Unbox returns values in tuple.
|
|
// Play: todo
|
|
func (t Tuple9[A, B, C, D, E, F, G, H, I]) Unbox() (A, B, C, D, E, F, G, H, I) {
|
|
return t.FieldA, t.FieldB, t.FieldC, t.FieldD, t.FieldE, t.FieldF, t.FieldG, t.FieldH, t.FieldI
|
|
}
|
|
|
|
// NewTuple9 creates a 9 elemnets tuple from a list of values.
|
|
// Play: todo
|
|
func NewTuple9[A any, B any, C any, D any, E any, F any, G any, H any, I any](a A, b B, c C, d D, e E, f F, g G, h H, i I) Tuple9[A, B, C, D, E, F, G, H, I] {
|
|
return Tuple9[A, B, C, D, E, F, G, H, I]{FieldA: a, FieldB: b, FieldC: c, FieldD: d, FieldE: e, FieldF: f, FieldG: g, FieldH: h, FieldI: i}
|
|
}
|
|
|
|
// Tuple10 represents a 10 elemnets tuple
|
|
type Tuple10[A any, B any, C any, D any, E any, F any, G any, H any, I any, J any] struct {
|
|
FieldA A
|
|
FieldB B
|
|
FieldC C
|
|
FieldD D
|
|
FieldE E
|
|
FieldF F
|
|
FieldG G
|
|
FieldH H
|
|
FieldI I
|
|
FieldJ J
|
|
}
|
|
|
|
// Unbox returns values in tuple.
|
|
// Play: todo
|
|
func (t Tuple10[A, B, C, D, E, F, G, H, I, J]) Unbox() (A, B, C, D, E, F, G, H, I, J) {
|
|
return t.FieldA, t.FieldB, t.FieldC, t.FieldD, t.FieldE, t.FieldF, t.FieldG, t.FieldH, t.FieldI, t.FieldJ
|
|
}
|
|
|
|
// NewTuple10 creates a 10 elemnets tuple from a list of values.
|
|
// Play: todo
|
|
func NewTuple10[A any, B any, C any, D any, E any, F any, G any, H any, I any, J any](a A, b B, c C, d D, e E, f F, g G, h H, i I, j J) Tuple10[A, B, C, D, E, F, G, H, I, J] {
|
|
return Tuple10[A, B, C, D, E, F, G, H, I, J]{FieldA: a, FieldB: b, FieldC: c, FieldD: d, FieldE: e, FieldF: f, FieldG: g, FieldH: h, FieldI: i, FieldJ: j}
|
|
}
|