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