Skip to content

Commit

Permalink
#234 Updated to make array split algorithm more straightforward.
Browse files Browse the repository at this point in the history
  • Loading branch information
ericzhang6222 committed May 19, 2020
1 parent b974610 commit 9077692
Showing 1 changed file with 8 additions and 16 deletions.
24 changes: 8 additions & 16 deletions syntax/std_seq_array_helper.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,25 +56,17 @@ func arraySplit(delimiter rel.Value, subject rel.Array) rel.Value {
result = append(result, rel.NewArray(e))
}
} else {
for start, absoluteIndex := 0, 0; start < subject.Count(); {
relativeIndex := search(subject.Values()[start:], delimiterArray.Values())
if relativeIndex >= 0 {
absoluteIndex = relativeIndex + start
if start != absoluteIndex {
result = append(result, rel.NewArray(subject.Values()[start:absoluteIndex]...))
} else if start == absoluteIndex {
// case `//seq.split(['A'],['A', 'B'])` -> `[[], ['B']]`
result = append(result, rel.NewArray())
}
start = absoluteIndex + delimiterArray.Count()
if start == subject.Count() {
// case `//seq.split(['B'],['A', 'B'])` -> `[['A'], []]`
subjectVals := subject.Values()
for {
if i := search(subjectVals, delimiterArray.Values()); i >= 0 {
if len(subjectVals[:i]) == 0 {
result = append(result, rel.NewArray())
} else {
result = append(result, rel.NewArray(subjectVals[:i]...))
}
subjectVals = subjectVals[i+delimiterArray.Count():]
} else {
if start == 0 || start < subject.Count() {
result = append(result, rel.NewArray(subject.Values()[start:]...))
}
result = append(result, rel.NewArray(subjectVals[i+delimiterArray.Count():]...))
break
}
}
Expand Down

0 comments on commit 9077692

Please sign in to comment.