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())
}
}
}