#include "card_stack.h" #include #include void init_stack(player_cards *deck) { *deck = NULL; } void push_stack(player_cards *deck, const char *str) { struct card_stack_item *new_card = malloc(sizeof(struct card_stack_item)); new_card->str = str; new_card->next = *deck; if(new_card->next) new_card->next->prev = new_card; new_card->prev = NULL; *deck = new_card; } int is_empty_stack(const player_cards deck) { return !deck; } int find_out_card_quantity_in_deck(player_cards deck) { int counter = 0; while(deck) { ++counter; deck = deck->next; } return counter; } const char* remove_card_from_stack(player_cards *deck, const char *str) { struct card_stack_item *tmp = NULL; struct card_stack_item *first_tmp = *deck; const char *card = NULL; while(first_tmp) { if(!strcmp(first_tmp->str, str)) { tmp = first_tmp; if(first_tmp->prev) first_tmp->prev->next = first_tmp->next; else *deck = first_tmp->next; if(first_tmp->next) first_tmp->next->prev = first_tmp->prev; card = tmp->str; free(tmp); return card; } first_tmp = first_tmp->next; } return 0; } const char* pop_stack(player_cards *deck) { struct card_stack_item *tmp; tmp = *deck; *deck = (*deck)->next; free(tmp); } struct card_stack_item* get_next_card_from_stack(player_cards deck, player_cards prev) { if(prev == NULL) return deck; else return prev->next; } int find_card_in_stack(player_cards involved_cards, const char *str) { while(involved_cards) { if(!strcmp(involved_cards->str, str)) return 1; involved_cards = involved_cards->next; } return 0; }