взяти означення мавка/пристрій;

дія КД_виділити_сиру_памʼять(система: адреса<КД::Система>, розмір: природне) -> памʼять<п8> {
  вернути пристрій_мавки_виділити_сиру_памʼять(розмір);
}

дія КД_перевиділити_сиру_памʼять(система: адреса<КД::Система>, значення: памʼять<п8>, новий_розмір: природне) -> памʼять<п8> {
  вернути пристрій_мавки_перевиділити_сиру_памʼять(значення, новий_розмір);
}

дія КД_звільнити_сиру_памʼять(система: адреса<КД::Система>, значення: невідома_памʼять) {
  пристрій_мавки_звільнити_сиру_памʼять(значення як памʼять<п8>);
}

дія пристрій_мавки_перекодувати_ю8_в_кд(розмір: природне, дані: памʼять<п8>, вихід_розміру: адреса<природне>, вихід_даних: адреса<памʼять<п8>>, вихід_позиції_помилки: адреса<природне>) -> логічне {
  змінна система_КД = КД::Система {
    дані = пусто,
    виділити_сиру_памʼять = КД_виділити_сиру_памʼять,
    звільнити_сиру_памʼять = КД_звільнити_сиру_памʼять,
    перевиділити_сиру_памʼять = КД_перевиділити_сиру_памʼять
  };

  змінна вихід: кд;
  змінна позиція_помилки: природне;

  змінна успіх = КД::перекодувати_з_ю8(
    система_КД::адреса,
    ю8 { розмір, дані },
    ні,
    ні,
    вихід::адреса,
    позиція_помилки::адреса
  );

  якщо успіх {
    вихід_розміру::вміст = вихід.розмір;
    вихід_даних::вміст = вихід.дані;
  }

  вернути успіх;
}

// нул-термінатед
дія пристрій_мавки_перекодувати_кд_в_ю8(розмір: природне, дані: памʼять<п8>, вихід_розміру: адреса<природне>, вихід_даних: адреса<памʼять<п8>>, вихід_позиції_помилки: адреса<природне>) -> логічне {
  змінна система_КД = КД::Система {
    дані = пусто,
    виділити_сиру_памʼять = КД_виділити_сиру_памʼять,
    звільнити_сиру_памʼять = КД_звільнити_сиру_памʼять,
    перевиділити_сиру_памʼять = КД_перевиділити_сиру_памʼять
  };

  змінна вихід: ю8;
  змінна позиція_помилки: природне;

  змінна успіх = КД::перекодувати_в_ю8(
    система_КД::адреса,
    кд { розмір, дані },
    так,
    вихід::адреса,
    позиція_помилки::адреса
  );

  якщо успіх {
    вихід_розміру::вміст = вихід.розмір;
    вихід_даних::вміст = вихід.дані;
  }

  вернути успіх;
}