calcTargetTopLevel() heuristically computes a new top level that the segmentStack should be merged to.
()
| 11 | // calcTargetTopLevel() heuristically computes a new top level that |
| 12 | // the segmentStack should be merged to. |
| 13 | func (ss *segmentStack) calcTargetTopLevel() int { |
| 14 | var minMergePercentage float64 |
| 15 | if ss.options != nil { |
| 16 | minMergePercentage = ss.options.MinMergePercentage |
| 17 | } |
| 18 | if minMergePercentage <= 0 { |
| 19 | minMergePercentage = DefaultCollectionOptions.MinMergePercentage |
| 20 | } |
| 21 | |
| 22 | newTopLevel := 0 |
| 23 | maxTopLevel := len(ss.a) - 2 |
| 24 | |
| 25 | for newTopLevel < maxTopLevel { |
| 26 | numX0 := ss.a[newTopLevel].Len() |
| 27 | numX1 := ss.a[newTopLevel+1].Len() |
| 28 | if (float64(numX1) / float64(numX0)) > minMergePercentage { |
| 29 | break |
| 30 | } |
| 31 | |
| 32 | newTopLevel++ |
| 33 | } |
| 34 | |
| 35 | return newTopLevel |
| 36 | } |
| 37 | |
| 38 | // ------------------------------------------------------ |
| 39 |