Make AddMouseRegion's index unsigned
[dockapps.git] / wmmp3 / song_hash.c
blob4284df5ad951c539527f599c684a3dbca6d2fff8
1 #include <stdlib.h>
2 #include <string.h>
3 #include "song_hash.h"
5 #define HASH_TABLE_SIZE 11
7 struct hash_elt *Table[HASH_TABLE_SIZE];
9 int hash_fn(int num);
10 void free_elt(struct hash_elt *elt);
12 int hash_fn(int num)
14 return (num % HASH_TABLE_SIZE);
17 void insert_song(int track_num, char *title, char *filename)
19 int hash_value;
20 struct hash_elt *hash_list;
21 struct hash_elt *new_elt;
24 new_elt = (struct hash_elt *) malloc(sizeof(struct hash_elt));
25 if (new_elt != NULL)
27 new_elt->track_num = track_num;
28 new_elt->title = (char *)strdup(title);
29 new_elt->filename = (char *)strdup(filename);
30 new_elt->next = NULL;
33 hash_value = hash_fn(track_num);
34 hash_list = Table[hash_value];
35 if (hash_list != NULL) {
36 while (hash_list->next != NULL) {
37 hash_list = hash_list->next;
39 hash_list->next = new_elt;
41 else
43 Table[hash_value] = new_elt;
47 struct hash_elt *get_song(int track_num)
49 int hash_value;
50 struct hash_elt *hash_list;
52 hash_value = hash_fn(track_num);
53 hash_list = Table[hash_value];
54 if (hash_list) {
55 while ((hash_list->track_num != track_num) &&
56 (hash_list->next != NULL)) {
57 hash_list = hash_list->next;
59 if (hash_list->track_num == track_num) {
60 return hash_list;
62 else {
63 return NULL;
66 else {
67 return NULL;
71 void free_elt(struct hash_elt *elt)
73 if (elt != NULL)
75 if (elt->next != NULL) {
76 free_elt(elt->next);
78 free(elt);
82 void empty_hash()
84 int i;
86 for (i = 0; i < HASH_TABLE_SIZE; i++) {
87 free_elt(Table[i]);
88 Table[i] = NULL;
92 void print_hash()
94 int i;
95 struct hash_elt *hash_list;
97 for (i = 0; i < HASH_TABLE_SIZE; i++) {
98 printf("%d:\n", i);
99 hash_list = Table[i];
100 while (hash_list != NULL) {
101 printf("\t%d: %s\n",
102 hash_list->track_num,
103 hash_list->title);
104 hash_list = hash_list->next;