]> jfr.im git - irc/quakenet/newserv.git/blob - graphing/fsample.h
add patricia_commands to Makefile.in
[irc/quakenet/newserv.git] / graphing / fsample.h
1 #ifndef __FSAMPLE_H
2 #define __FSAMPLE_H
3
4 #include <sys/types.h>
5
6 typedef u_int32_t fsample_t;
7
8 typedef struct fsample fsample;
9
10 /* nice loss of type safety here... */
11 typedef void *(*CoreHandlerAddFn)(void *handler, void *arg);
12 typedef void (*CoreHandlerDelFn)(void *);
13
14 /* single sample functions */
15 fsample *fsopen(char *filename, size_t samples, CoreHandlerAddFn chafn, CoreHandlerDelFn chdfn);
16 void fsclose(fsample *f);
17 inline void fsset(fsample *f, fsample_t pos, fsample_t value);
18 inline fsample_t fsget(fsample *f, fsample_t pos, fsample_t *t);
19 inline fsample_t fsget_r(fsample *f, fsample_t pos, fsample_t *t);
20
21 struct fsample_m;
22 typedef fsample_t (*DeriveValueFn)(struct fsample_m *v, int entry, fsample_t pos, void *tag);
23
24 typedef struct fsample_m_entry {
25 size_t freq;
26 fsample *f;
27 void *tag;
28 DeriveValueFn derive;
29 } fsample_m_entry;
30
31 typedef struct fsample_m {
32 size_t pos, samples;
33 CoreHandlerAddFn chafn;
34 CoreHandlerDelFn chdfn;
35 struct fsample_m_entry entry[];
36 } fsample_m;
37
38 /* multiple sample functions */
39 fsample_m *fsopen_m(size_t count, char *filename, size_t samples, CoreHandlerAddFn chafn, CoreHandlerDelFn chdfn);
40 void fsclose_m(fsample_m *f);
41 int fsadd_m(fsample_m *f, char *filename, size_t freq, DeriveValueFn derive, void *tag);
42 void fsset_m(fsample_m *f, fsample_t pos, fsample_t value);
43 inline fsample_t fsget_m(fsample_m *f, int entry, fsample_t pos, fsample_t *t);
44 inline fsample_t fsget_mr(fsample_m *f, int entry, fsample_t pos, fsample_t *t);
45
46 /* aggregates */
47 fsample_t fsamean(fsample_m *f, int entry, fsample_t pos, void *tag);
48 fsample_t fsapmean(fsample_m *f, int entry, fsample_t pos, void *tag);
49
50 #endif