owner_pass.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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. // Owner -- возвращает назначенного владельца (не текущего)
  39. func (sf *OwnerPass) Owner() *LOwner {
  40. return sf.ownerDest
  41. }
  42. // OwnerCur -- возвращает текущего владельца (не назначенного)
  43. func (sf *OwnerPass) OwnerCur() *LOwner {
  44. return sf.ownerCur
  45. }
  46. // String -- возвращает строковое представление объекта.
  47. func (sf *OwnerPass) String() string {
  48. return fmt.Sprintf(strPass, sf.ownerDest, sf.ownerCur)
  49. }