pos.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. // package pos -- позиция в коде
  2. package pos
  3. import (
  4. "fmt"
  5. "log"
  6. )
  7. // IPos -- низменяемая позиция курсора
  8. type IPos interface {
  9. String() string
  10. }
  11. // IPosMut -- низменяемая позиция курсора
  12. type IPosMut interface {
  13. IPos
  14. // GetX -- получить X
  15. GetX() int
  16. // IncX -- инкремент X
  17. IncX()
  18. // SetX -- установить X
  19. SetX(x int)
  20. // GetY -- получить Y
  21. GetY() int
  22. // IncY -- увеличить Y
  23. IncY()
  24. // NextLine -- перейти на новую строку
  25. NextLine()
  26. }
  27. // Позиция в коде
  28. type pos struct {
  29. x int // Строка
  30. y int // Столбец
  31. }
  32. // NewPos -- возвращает новую позицию в коде
  33. func NewPos(x, y int) *pos {
  34. return &pos{x, y}
  35. }
  36. var (
  37. PosCur = NewPos(1, 1) // Позиция курсора в изоляте
  38. )
  39. // GetX -- получить X
  40. func (sf *pos) GetX() int {
  41. return sf.x
  42. }
  43. // IncX -- инкремент X
  44. func (sf *pos) IncX() {
  45. sf.x++
  46. }
  47. // SetX -- установить X
  48. func (sf *pos) SetX(x int) {
  49. if x < 1 {
  50. log.Panicf("pos,SetX(): x(%v)<1", x)
  51. }
  52. sf.x = x
  53. }
  54. // GetY -- получить Y
  55. func (sf *pos) GetY() int {
  56. return sf.y
  57. }
  58. // IncY -- увеличить Y на 1
  59. func (sf *pos) IncY() {
  60. sf.y++
  61. }
  62. // NextLine -- переход на следующую строку
  63. func (sf *pos) NextLine() {
  64. sf.y++
  65. sf.x = 1
  66. }
  67. // String -- возвращает строковое представление координаты в коде
  68. func (sf *pos) String() string {
  69. return fmt.Sprintf("%d:%d", sf.y, sf.x)
  70. }