Update list implementation to work with memory pools (#168)

* Introduce indexed list implementation

* Fix CI tests for pool

* Take bitset out of pool

* Replace joker bitset interactions with wrappers

* Add bitset tests

* Add test to gitignore

---------

Co-authored-by: rfehr-idexx <ric-fehr@idexx.com>
This commit is contained in:
Rickey
2025-11-11 17:56:21 +02:00
committed by GitHub
co-authored by rfehr-idexx
parent d5f59e904b
commit e0cffab768
22 changed files with 1448 additions and 338 deletions
+19 -20
View File
@@ -3,6 +3,7 @@
#include "util.h"
#include "hand_analysis.h"
#include "list.h"
#include "pool.h"
#include <stdlib.h>
@@ -266,22 +267,20 @@ static JokerEffect joker_stencil_effect(Joker *joker, Card *scored_card, enum Jo
SCORE_ON_EVENT_ONLY(JOKER_EVENT_INDEPENDENT, joker_event, effect)
List* jokers = get_jokers();
List* jokers = get_jokers_list();
// +1 xmult per empty joker slot...
int num_jokers = list_get_size(jokers);
int num_jokers = list_get_len(jokers);
effect.xmult = (MAX_JOKERS_HELD_SIZE) - num_jokers;
// ...and also each stencil_joker adds +1 xmult
for (int i = 0; i < num_jokers; i++ )
ListItr itr = list_itr_create(jokers);
JokerObject* joker_object;
while((joker_object = list_itr_next(&itr)))
{
JokerObject* joker_object = list_get(jokers, i);
if (joker_object->joker->id == JOKER_STENCIL_ID)
{
effect.xmult++;
}
if (joker_object->joker->id == JOKER_STENCIL_ID) effect.xmult++;
}
return effect;
@@ -491,7 +490,7 @@ static JokerEffect abstract_joker_effect(Joker *joker, Card *scored_card, enum J
SCORE_ON_EVENT_ONLY(JOKER_EVENT_INDEPENDENT, joker_event, effect)
// +1 xmult per occupied joker slot
int num_jokers = list_get_size(get_jokers());
int num_jokers = list_get_len(get_jokers_list());
effect.mult = num_jokers * 3;
return effect;
@@ -795,7 +794,6 @@ static JokerEffect triboulet_joker_effect(Joker *joker, Card *scored_card, enum
return effect;
}
static JokerEffect dusk_joker_effect(Joker *joker, Card *scored_card, enum JokerEvent joker_event)
{
JokerEffect effect = {0};
@@ -832,15 +830,16 @@ static JokerEffect dusk_joker_effect(Joker *joker, Card *scored_card, enum Joker
static JokerEffect blueprint_joker_effect(Joker *joker, Card *scored_card, enum JokerEvent joker_event)
{
JokerEffect effect = {0};
List* jokers = get_jokers();
int list_size = list_get_size(jokers);
for (int i = 0; i < list_size - 1; i++ )
List* jokers = get_jokers_list();
ListItr itr = list_itr_create(jokers);
JokerObject* curr_joker_object;
while((curr_joker_object = list_itr_next(&itr)))
{
JokerObject* curr_joker_object = list_get(jokers, i);
if (curr_joker_object->joker == joker)
{
JokerObject* next_joker_object = list_get(jokers, i + 1);
JokerObject* next_joker_object = list_itr_next(&itr);
effect = joker_get_score_effect(next_joker_object->joker, scored_card, joker_event);
break;
}
@@ -859,8 +858,8 @@ static JokerEffect brainstorm_joker_effect(Joker *joker, Card *scored_card, enum
return effect;
}
List* jokers = get_jokers();
JokerObject* first_joker = list_get(jokers, 0);
List* jokers = get_jokers_list();
JokerObject* first_joker = list_get_at_idx(jokers, 0);
if (first_joker != NULL && first_joker->joker->id != JOKER_BRAINSTORM_ID)
{
@@ -1083,7 +1082,7 @@ const JokerInfo joker_registry[] = {
{ UNCOMMON_JOKER, 7, NULL,/* Four Fingers */ on_joker_created_noop }, // 48
{ COMMON_JOKER, 4, scholar_joker_effect, on_joker_created_noop }, // 49
// The following jokers don't have sprites yet,
// The following jokers don't have sprites yet,
// uncomment them when their sprites are added.
#if 0
{ COMMON_JOKER, 5, photograph_joker_effect, photograph_on_joker_created },