| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- // package pos -- позиция в коде
- package pos
- import (
- "fmt"
- "log"
- )
- // IPos -- низменяемая позиция курсора
- type IPos interface {
- String() string
- }
- // IPosMut -- низменяемая позиция курсора
- type IPosMut interface {
- IPos
- // GetX -- получить X
- GetX() int
- // IncX -- инкремент X
- IncX()
- // SetX -- установить X
- SetX(x int)
- // GetY -- получить Y
- GetY() int
- // IncY -- увеличить Y
- IncY()
- // NextLine -- перейти на новую строку
- NextLine()
- }
- // Позиция в коде
- type pos struct {
- x int // Строка
- y int // Столбец
- }
- // NewPos -- возвращает новую позицию в коде
- func NewPos(x, y int) *pos {
- return &pos{x, y}
- }
- var (
- PosCur = NewPos(1, 1) // Позиция курсора в изоляте
- )
- // GetX -- получить X
- func (sf *pos) GetX() int {
- return sf.x
- }
- // IncX -- инкремент X
- func (sf *pos) IncX() {
- sf.x++
- }
- // SetX -- установить X
- func (sf *pos) SetX(x int) {
- if x < 1 {
- log.Panicf("pos,SetX(): x(%v)<1", x)
- }
- sf.x = x
- }
- // GetY -- получить Y
- func (sf *pos) GetY() int {
- return sf.y
- }
- // IncY -- увеличить Y на 1
- func (sf *pos) IncY() {
- sf.y++
- }
- // NextLine -- переход на следующую строку
- func (sf *pos) NextLine() {
- sf.y++
- sf.x = 1
- }
- // String -- возвращает строковое представление координаты в коде
- func (sf *pos) String() string {
- return fmt.Sprintf("%d:%d", sf.y, sf.x)
- }
|