owner_pass.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package owner
  2. import (
  3. "fmt"
  4. "gitp78su.ipnodns.ru/svi/kern/v4/d0/helpers"
  5. )
  6. // OwnerPass -- паспорт владельца.
  7. type OwnerPass struct {
  8. ownerDest *LOwner // Назначенный владелец
  9. ownerCur *LOwner // Текущий владелец
  10. }
  11. // CheckOwner -- проверяет правильность паспорта владельца.
  12. //
  13. // ОБЯЗАТЕЛЬНЫЙ ВЫЗОВ
  14. // При несовпадении назначенного владельца и фактического
  15. // будет вызвана паника!!!
  16. func (sf *OwnerPass) CheckOwner() {
  17. helpers.
  18. If(sf.ownerDest.Id() != sf.ownerCur.Id()).
  19. Hassert("OwnerPass.CheckOwner(): объект не принадлежит владельцу, dest=%v, cur=%v",
  20. sf.ownerDest, sf.ownerCur)
  21. }
  22. // Move -- переназначает владельца объекта.
  23. func (sf *OwnerPass) Move(owner *LOwner) *OwnerPass {
  24. sf.CheckOwner()
  25. recPass := &OwnerPass{
  26. ownerDest: owner,
  27. ownerCur: owner,
  28. }
  29. sf.ownerCur = owner
  30. return recPass
  31. }
  32. const (
  33. strPass = `OwnerPass(
  34. ownerDest(%v)
  35. ownerCur(%v)
  36. )`
  37. )
  38. // String -- возвращает строковое представление объекта.
  39. func (sf *OwnerPass) String() string {
  40. return fmt.Sprintf(strPass, sf.ownerDest, sf.ownerCur)
  41. }