-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtournament.h
134 lines (111 loc) · 3.92 KB
/
tournament.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/*-
* Copyright (c) 2017 Etienne Bagnoud <[email protected]>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#ifndef TOURNAMENT_H__
#define TOURNAMENT_H__
#define MAX_OPPONENT_NAME 50
#define TOURNAMENT_TYPE_TOURNAMENT 0xA000
#define TOURNAMENT_TYPE_POOL 0xA001
#define TOURNAMENT_TYPE_OPPONENT 0xA002
#define TOURNAMENT_TYPE_MEETING 0xA003
#define TOURNAMENT_SORT_NOROW 1
#ifndef is_null
#define is_null(A) ((A) == NULL)
#endif /* is_null */
#ifndef null
#define null(A) free(A); (A) = NULL;
#endif /* null */
#ifndef $
#define $(A) ((A) = calloc(1, sizeof(*(A))))
#endif /* $ */
#ifndef $$
#define $$(B, A) ((A) = calloc((B), sizeof(*(A))))
#endif /* $$ */
#include <stdio.h>
#include <assert.h>
typedef struct {
unsigned short _type; /* must be first in struct */
unsigned int id;
unsigned int weight;
char * name;
void * any;
void * sort; /* hook for sorting function to attach data if needed */
} Opponent;
typedef struct {
unsigned short _type; /* must be first in struct */
unsigned int id;
unsigned int planned;
Opponent * opponents[2];
int white;
int blue;
int winner;
void * any;
void * next;
} Meeting;
typedef struct {
unsigned short _type; /* must be first in struct */
unsigned int id;
unsigned int sorting; /* which sort to apply */
unsigned int randomize; /* randomize first */
Meeting ** meetings;
Meeting ** ordered;
size_t meet_count;
Opponent ** opponents;
size_t opp_count;
} Pool;
typedef struct {
unsigned short _type; /* must be first in struct */
char * name;
Opponent ** opponents;
size_t opp_count;
Pool ** pools;
size_t pools_count;
unsigned int weight_gap;
} Tournament;
/* Free anything based on first unsigned int of the struct */
void * any_free(void *);
void any_dump(FILE * stream, void * any);
/* *** Tournament function *** */
Tournament * tournament_init(char * name, unsigned int weight_gap);
void tournament_dump(FILE * stream, Tournament * t);
void * tournament_free(Tournament * t);
/* *** Pool function *** */
Pool * pool_init(unsigned int);
int pool_add(Pool *, Opponent *);
void * pool_free(Pool *);
void pool_dump(FILE *, Pool *);
/* *** Opponent function *** */
Opponent * opponent_init(unsigned int, char *);
void * opponent_free(Opponent *);
void opponent_dump(FILE *, Opponent *);
/* *** Meeting function *** */
Meeting * meeting_init(unsigned int, Opponent *, Opponent *);
void meeting_dump(FILE *, Meeting *);
void * meeting_free(Meeting *);
void meeting_make_pool(Pool *);
/* *** ordering function *** */
void order_norow(Pool *);
void order_serie(Pool *);
#endif /* TOURNAMENT_H__ */