Files
obitools4/pkg/obiiter/merge.go

50 lines
1.0 KiB
Go
Raw Normal View History

package obiiter
import "git.metabarcoding.org/lecasofts/go/obitools/pkg/obiseq"
2023-01-22 22:04:17 +01:00
func (iterator IBioSequence) IMergeSequenceBatch(na string, statsOn []string, sizes ...int) IBioSequence {
batchsize := 100
buffsize := iterator.BufferSize()
if len(sizes) > 0 {
batchsize = sizes[0]
}
if len(sizes) > 1 {
buffsize = sizes[1]
}
2023-01-22 22:04:17 +01:00
newIter := MakeIBioSequence(buffsize)
newIter.Add(1)
go func() {
newIter.WaitAndClose()
}()
go func() {
for j := 0; !iterator.Finished(); j++ {
batch := BioSequenceBatch{
slice: obiseq.MakeBioSequenceSlice(),
order: j}
for i := 0; i < batchsize && iterator.Next(); i++ {
seqs := iterator.Get()
batch.slice = append(batch.slice, seqs.slice.Merge(na, statsOn))
}
if batch.Len() > 0 {
newIter.Push(batch)
}
}
newIter.Done()
}()
return newIter
}
func MergePipe(na string, statsOn []string, sizes ...int) Pipeable {
2023-01-22 22:04:17 +01:00
f := func(iterator IBioSequence) IBioSequence {
return iterator.IMergeSequenceBatch(na, statsOn, sizes...)
}
return f
}