Checklist
Чеклист готовности с авто-трекером флагов.
Класс позволяет объявлять булевы флаги как делегированные свойства (var x by checklist.watch()). Каждый флаг автоматически регистрируется внутри чеклиста при создании делегата. Когда все зарегистрированные флаги становятся true хотя бы один раз, чеклист однократно вызывает allChecksIsReady (по умолчанию — публикует событие готовности в EventBus).
Особенности:
Авто-регистрация: не требуется вручную перечислять поля чеклиста — всё, что создано через watch, учитывается.
Однократный вызов: allChecksIsReady срабатывает ровно один раз за жизненный цикл экземпляра, до вызова reset.
Ленивая модель: флаги считаются зарегистрированными с момента создания делегата (вызова watch).
Потоковая модель: реализация не синхронизирована и не гарантирует атомарность/видимость между потоками. Используйте из одного потока или добавьте собственную синхронизацию/атомики при необходимости.
Ограничения:
Список флагов фиксируется фактом создания делегатов. Динамическое «удаление» флага не поддерживается.
reset сбрасывает только признак «стреляли/не стреляли». Значения флагов не изменяются.
Пример:
class MyManager {
private val checklist = Checklist()
var configLoaded by checklist.watch()
var brokerConnected by checklist.watch()
fun init() {
configLoaded = true
brokerConnected = true
// когда оба флага true — onAllTrue() сработает один раз
}
}See also
Functions
Сбрасывает внутренний признак «срабатывания» allChecksIsReady, позволяя повторное срабатывание после последующих изменений флагов.