mirror of
https://github.com/SagerNet/sing-box.git
synced 2024-11-16 14:32:21 +08:00
32 lines
535 B
Go
32 lines
535 B
Go
|
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
|
||
|
}
|