|
56 | 56 | ## TODO: Materialise the cat into a decsision tree |
57 | 57 |
|
58 | 58 | ## Implementation for CatConfig |
59 | | -struct StatefulCatConfig{ItemBankT <: AbstractItemBank} <: StatefulCat |
| 59 | +struct StatefulCatConfig{TrackedResponsesT <: TrackedResponses} <: StatefulCat |
60 | 60 | rules::CatRules |
61 | | - tracked_responses::TrackedResponses |
62 | | - item_bank::Ref{ItemBankT} |
| 61 | + tracked_responses::Ref{TrackedResponsesT} |
63 | 62 | end |
64 | 63 |
|
65 | | -function StatefulCatConfig(rules, item_bank) |
| 64 | +function StatefulCatConfig(rules::CatRules, item_bank::AbstractItemBank) |
66 | 65 | bare_responses = BareResponses(ResponseType(item_bank)) |
67 | 66 | tracked_responses = TrackedResponses( |
68 | 67 | bare_responses, |
69 | 68 | item_bank, |
70 | 69 | rules.ability_tracker |
71 | 70 | ) |
72 | | - return StatefulCatConfig(rules, tracked_responses, Ref(item_bank)) |
| 71 | + return StatefulCatConfig(rules, Ref(tracked_responses)) |
73 | 72 | end |
74 | 73 |
|
75 | 74 | function next_item(config::StatefulCatConfig) |
76 | | - return best_item(config.rules.next_item, config.tracked_responses, config.item_bank[]) |
| 75 | + return best_item(config.rules.next_item, config.tracked_responses[]) |
77 | 76 | end |
78 | 77 |
|
79 | 78 | function ranked_items(config::StatefulCatConfig) |
80 | 79 | return sortperm(compute_criteria( |
81 | | - config.rules.next_item, config.tracked_responses, config.item_bank[])) |
| 80 | + config.rules.next_item, config.tracked_responses[])) |
82 | 81 | end |
83 | 82 |
|
84 | 83 | function item_criteria(config::StatefulCatConfig) |
85 | 84 | return compute_criteria( |
86 | | - config.rules.next_item, config.tracked_responses, config.item_bank[]) |
| 85 | + config.rules.next_item, config.tracked_responses[]) |
87 | 86 | end |
88 | 87 |
|
89 | 88 | function add_response!(config::StatefulCatConfig, index, response) |
| 89 | + tracked_responses = config.tracked_responses[] |
90 | 90 | Aggregators.add_response!( |
91 | | - config.tracked_responses, Response( |
92 | | - ResponseType(config.item_bank[]), index, response)) |
| 91 | + tracked_responses, Response( |
| 92 | + ResponseType(tracked_responses.item_bank), index, response)) |
93 | 93 | end |
94 | 94 |
|
95 | 95 | function rollback!(config::StatefulCatConfig) |
96 | | - pop_response!(config.tracked_responses) |
| 96 | + pop_response!(config.tracked_responses[]) |
97 | 97 | end |
98 | 98 |
|
99 | 99 | function reset!(config::StatefulCatConfig) |
100 | | - empty!(config.tracked_responses) |
| 100 | + empty!(config.tracked_responses[]) |
101 | 101 | end |
102 | 102 |
|
103 | 103 | function set_item_bank!(config::StatefulCatConfig, item_bank) |
104 | | - reset!(config) |
105 | | - config.item_bank[] = item_bank |
| 104 | + bare_responses = BareResponses(ResponseType(item_bank)) |
| 105 | + config.tracked_responses[] = TrackedResponses( |
| 106 | + bare_responses, |
| 107 | + item_bank, |
| 108 | + config.rules.ability_tracker |
| 109 | + ) |
106 | 110 | end |
107 | 111 |
|
108 | 112 | function get_responses(config::StatefulCatConfig) |
109 | | - return config.tracked_responses.responses |
| 113 | + return config.tracked_responses[].responses |
110 | 114 | end |
111 | 115 |
|
112 | 116 | function get_ability(config::StatefulCatConfig) |
113 | | - return (config.rules.ability_estimator(config.tracked_responses), nothing) |
| 117 | + return (config.rules.ability_estimator(config.tracked_responses[]), nothing) |
114 | 118 | end |
115 | 119 |
|
116 | 120 | ## TODO: Implementation for MaterializedDecisionTree |
|
0 commit comments