blob: 7be3cd8c8237615e3ed852f8849dd301862f21ff (
plain)
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
|
/* PR target/11044 */
/* Originator: Tim McGrath <misty-@charter.net> */
/* Testcase contributed by Eric Botcazou <ebotcazou@libertysurf.fr> */
/* Testcase copied from gcc.target/i386/loop-3.c */
extern void *memset (void *, int, __SIZE_TYPE__);
extern void abort (void);
typedef struct
{
unsigned char colormod;
} entity_state_t;
typedef struct
{
int num_entities;
entity_state_t *entities;
} packet_entities_t;
typedef struct
{
double senttime;
float ping_time;
packet_entities_t entities;
} client_frame_t;
typedef enum
{
cs_free,
cs_server,
cs_zombie,
cs_connected,
cs_spawned
} sv_client_state_t;
typedef struct client_s
{
sv_client_state_t state;
int ping;
client_frame_t frames[64];
} client_t;
int CalcPing (client_t *cl)
{
float ping;
int count, i;
register client_frame_t *frame;
if (cl->state == cs_server)
return cl->ping;
ping = 0;
count = 0;
for (frame = cl->frames, i = 0; i < 64; i++, frame++) {
if (frame->ping_time > 0) {
ping += frame->ping_time;
count++;
}
}
if (!count)
return 9999;
ping /= count;
return ping * 1000;
}
int main(void)
{
client_t cl;
memset(&cl, 0, sizeof(cl));
cl.frames[0].ping_time = 1.0f;
if (CalcPing(&cl) != 1000)
abort();
return 0;
}
|