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