/************************************************************************** * ___ __ __ ___ _ __ * * / _ \\ \/ // _ \ '_ \ * * | (_) |> <| __/ | | | * * \___//_/\_\\___|_| |_| * * * * The card game * * * * Copyright (C) 2011, Reiner Herrmann * * Mario Kilies * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * * * **************************************************************************/ #include "hand.h" #include #include #include "card.h" /** * Compares two hands; used for sorting them in hand_sort */ static int hand_comparator(const void *a, const void *b) { card c1 = *(card *)a; card c2 = *(card *)b; return c1 - c2; } /** * Sord the cards in a hand * @param[in,out] h Pointer to hand that should be sorted */ void hand_sort(hand_t *h) { assert(h != NULL); qsort(h->cards, MAX_HAND_CARDS, sizeof(card), hand_comparator); } /** * Removes a card from a hand by setting it to invalid value 0 * @param[in,out] h Hand to remove card from * @param[in] card_index Index of card to remove */ void hand_remove_card(hand_t *h, const uint8_t card_index) { assert(h != NULL); h->cards[card_index] = 0; } /** * Count number of valid cards in hand * @param[in] h Hand to count * @return Number of valid cards in hand */ const uint8_t hand_count_cards(const hand_t* h) { uint8_t count = 0; for(int i=0; icards[i] != 0) count++; return count; }