]> git.lizzy.rs Git - micro.git/blobdiff - cmd/micro/lineArray.go
Merge pull request #1125 from nabeelomer/master
[micro.git] / cmd / micro / lineArray.go
index 93004ac48aabef4a2d15461f6a715179df3e5324..248603782d9a7de1c55c2bc91869c16f955abeec 100644 (file)
@@ -29,6 +29,8 @@ func runeToByteIndex(n int, txt []byte) int {
        return count
 }
 
+// A Line contains the data in bytes as well as a highlight state, match
+// and a flag for whether the highlighting needs to be updated
 type Line struct {
        data []byte
 
@@ -43,10 +45,12 @@ type LineArray struct {
        lines []Line
 }
 
+// Append efficiently appends lines together
+// It allocates an additional 10000 lines if the original estimate
+// is incorrect
 func Append(slice []Line, data ...Line) []Line {
        l := len(slice)
        if l+len(data) > cap(slice) { // reallocate
-               // Allocate double what's needed, for future growth.
                newSlice := make([]Line, (l+len(data))+10000)
                // The copy function is predeclared and works for any slice type.
                copy(newSlice, slice)
@@ -85,7 +89,6 @@ func NewLineArray(size int64, reader io.Reader) *LineArray {
                if n >= 1000 && loaded >= 0 {
                        totalLinesNum := int(float64(size) * (float64(n) / float64(loaded)))
                        newSlice := make([]Line, len(la.lines), totalLinesNum+10000)
-                       // The copy function is predeclared and works for any slice type.
                        copy(newSlice, la.lines)
                        la.lines = newSlice
                        loaded = -1
@@ -143,9 +146,9 @@ func (la *LineArray) SaveString(useCrlf bool) string {
 
 // NewlineBelow adds a newline below the given line number
 func (la *LineArray) NewlineBelow(y int) {
-       la.lines = append(la.lines, Line{[]byte(" "), nil, nil, false})
+       la.lines = append(la.lines, Line{[]byte{' '}, nil, nil, false})
        copy(la.lines[y+2:], la.lines[y+1:])
-       la.lines[y+1] = Line{[]byte(""), la.lines[y].state, nil, false}
+       la.lines[y+1] = Line{[]byte{}, la.lines[y].state, nil, false}
 }
 
 // inserts a byte array at a given location
@@ -243,18 +246,22 @@ func (la *LineArray) Substr(start, end Loc) string {
        return str
 }
 
+// State gets the highlight state for the given line number
 func (la *LineArray) State(lineN int) highlight.State {
        return la.lines[lineN].state
 }
 
+// SetState sets the highlight state at the given line number
 func (la *LineArray) SetState(lineN int, s highlight.State) {
        la.lines[lineN].state = s
 }
 
+// SetMatch sets the match at the given line number
 func (la *LineArray) SetMatch(lineN int, m highlight.LineMatch) {
        la.lines[lineN].match = m
 }
 
+// Match retrieves the match for the given line number
 func (la *LineArray) Match(lineN int) highlight.LineMatch {
        return la.lines[lineN].match
 }