Skip to content

Latest commit

 

History

History
40 lines (30 loc) · 1.03 KB

File metadata and controls

40 lines (30 loc) · 1.03 KB

1.3.44 Text editor buffer. Develop a data type for a buffer in a text editor

We use two stacks to solve this. Left stack contains characters on the left from cursor and cursor iself. Right stach contains characters on the right of cursor.

struct TextBuffer {
    private var leftBuffer = Stack<Character>()
    private var rightBuffer = Stack<Character>()

    var size: Int {
        return leftBuffer.count + rightBuffer.count
    }

    mutating func insert(_ char: Character) {
        leftBuffer.push(char)
    }

    mutating func delete() -> Character? {
        guard !leftBuffer.isEmpty else { return nil }

        return leftBuffer.pop()
    }

    mutating func left(by padding: Int) {
        for _ in 0..<padding {
            guard !leftBuffer.isEmpty else { return }

            rightBuffer.push(leftBuffer.pop())
        }
    }

    mutating func right(by padding: Int) {
        for _ in 0..<padding {
            guard !rightBuffer.isEmpty else { return }

            leftBuffer.push(rightBuffer.pop())
        }
    }
}