2023-03-15 06:56:06 +00:00
|
|
|
//go:build linux || darwin
|
|
|
|
|
2022-10-25 04:55:00 +00:00
|
|
|
package libbox
|
|
|
|
|
|
|
|
import "github.com/sagernet/sing/common"
|
|
|
|
|
|
|
|
type StringIterator interface {
|
|
|
|
Next() string
|
|
|
|
HasNext() bool
|
|
|
|
}
|
|
|
|
|
|
|
|
var _ StringIterator = (*iterator[string])(nil)
|
|
|
|
|
|
|
|
type iterator[T any] struct {
|
|
|
|
values []T
|
|
|
|
}
|
|
|
|
|
|
|
|
func newIterator[T any](values []T) *iterator[T] {
|
|
|
|
return &iterator[T]{values}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (i *iterator[T]) Next() T {
|
|
|
|
if len(i.values) == 0 {
|
|
|
|
return common.DefaultValue[T]()
|
|
|
|
}
|
|
|
|
nextValue := i.values[0]
|
|
|
|
i.values = i.values[1:]
|
|
|
|
return nextValue
|
|
|
|
}
|
|
|
|
|
|
|
|
func (i *iterator[T]) HasNext() bool {
|
|
|
|
return len(i.values) > 0
|
|
|
|
}
|