// 2025-2026 Богданович Давид Когут Прихожденко (кдб.дійсність.укр)

взяти визначення мавка/машина;

простір мавка {
  внутрішня дія перевірити_чи_дані_рівні(
    М: адреса<Машина>,
    шлях1: адреса<ПредметДаних>,
    шлях2: адреса<ПредметДаних>
  ) -> логічне {
    якщо шлях1 == шлях2 {
      вернути так;
    }

    якщо шлях1.розмір != шлях2.розмір {
      вернути ні;
    }

    змінна п: природне = 0;
    поки п < шлях1.розмір {
      якщо шлях1.дані[п] != шлях2.дані[п] {
        вернути ні;
      }

      п += 1;
    }

    вернути так;
  }

  дія записати_взяте_значення(
    М: адреса<Машина>,
    шлях: адреса<ПредметДаних>,
    значення: Значення
  ) {
    змінна п: природне = 0;

    поки п < М.взяті_значення.розмір {
      змінна взяте_значення = М.взяті_значення.дані[п]::адреса;

      якщо взяте_значення.шлях != пусто і перевірити_чи_дані_рівні(М, взяте_значення.шлях, шлях) {
        взяте_значення.значення = значення;

        вернути;
      }

      п += 1;
    }

    М.взяті_значення.дані = перевиділити<ВзятеЗначення>(М, М.взяті_значення.дані, М.взяті_значення.розмір + 1);
    М.взяті_значення.дані[М.взяті_значення.розмір] = ВзятеЗначення { шлях, значення };
    М.взяті_значення.розмір += 1;
  }

  дія знайти_взяте_значення(
    М: адреса<Машина>,
    шлях: адреса<ПредметДаних>,
    вихід_значення: адреса<Значення>
  ) -> логічне {
    змінна п: природне = 0;

    поки п < М.взяті_значення.розмір {
      змінна взяте_значення = М.взяті_значення.дані[п];

      якщо взяте_значення.шлях != пусто і перевірити_чи_дані_рівні(М, взяте_значення.шлях, шлях) {
        вихід_значення::вміст = взяте_значення.значення;

        вернути так;
      }

      п += 1;
    }

    вернути ні;
  }

  дія видалити_взяте_значення(
    М: адреса<Машина>,
    шлях: адреса<ПредметДаних>
  ) -> логічне {
    змінна п: природне = 0;

    поки п < М.взяті_значення.розмір {
      змінна взяте_значення = М.взяті_значення.дані[п]::адреса;

      якщо взяте_значення.шлях != пусто і перевірити_чи_дані_рівні(М, взяте_значення.шлях, шлях) {
        взяте_значення.шлях = пусто;
        взяте_значення.значення = НЕДІЙСНЕ;

        вернути так;
      }

      п += 1;
    }

    вернути ні;
  }
}