-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathextern.h
More file actions
127 lines (108 loc) · 3.66 KB
/
Copy pathextern.h
File metadata and controls
127 lines (108 loc) · 3.66 KB
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
/* $Id$ */
/*
* Copyright (c) 2014, 2015 Kristaps Dzonsons <kristaps@bsd.lv>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
#ifndef EXTERN_H
#define EXTERN_H
struct kdatahist {
double rmin; /* minimum inclusive */
double rmax; /* maximum non-inclusive */
};
struct kdatabucket {
size_t rmin; /* minimum inclusive */
size_t rmax; /* maximum non-inclusive */
};
struct kdatamean {
size_t *ns; /* number of bucket modifications */
};
struct kdatastddev {
size_t *ns; /* number of bucket modifications */
double *m1s; /* incremental mean */
double *m2s; /* incremental variance parameter */
};
struct kdatavector {
size_t stepsz; /* vector increase slush size */
size_t pairbufsz; /* allocated buffer size */
};
enum kdatatype {
KDATA_ARRAY,
KDATA_BUCKET,
KDATA_BUFFER,
KDATA_HIST,
KDATA_MEAN,
KDATA_STDDEV,
KDATA_VECTOR
};
typedef int (*ksetfunc)(struct kdata *, size_t, double, double);
/*
* A dependant tacks on to a data source and is notified (by way of
* "func") whenever the value of a bucket has changed.
*/
struct kdep {
struct kdata *dep;
ksetfunc func;
};
/*
* A data source can either be "real" (in the sense of being modified by
* the calling code) or a "dependant" (in the sense of being updated
* from another data source).
*/
struct kdata {
struct kpair *pairs; /* data pairs */
size_t pairsz; /* number of pairs */
size_t refs; /* >0 references to data */
struct kdep *deps; /* dependants */
size_t depsz; /* number of dependants */
enum kdatatype type;
union {
struct kdatahist hist;
struct kdatavector vector;
struct kdatabucket bucket;
struct kdatamean mean;
struct kdatastddev stddev;
} d;
};
struct kplotdat {
struct kdata **datas; /* referenced data */
size_t datasz; /* number of data sets */
struct kdatacfg *cfgs; /* plot configurations */
enum kplottype *types; /* plot types */
enum kplotstype stype; /* multiplot type */
enum ksmthtype smthtype; /* smoothing type */
struct ksmthcfg smth; /* smooth configuration */
double sum; /* used for KSMOOTH_CDF */
};
struct kplot {
struct kplotdat *datas; /* data sets per plot */
size_t datasz; /* number of data sets */
struct kplotcfg cfg; /* configuration */
};
__BEGIN_DECLS
int kdata_dep_add(struct kdata *, struct kdata *, ksetfunc);
int kdata_dep_run(struct kdata *, size_t);
int kdata_set(struct kdata *, size_t, double, double);
void kplotctx_border_init(struct kplotctx *);
void kplotctx_grid_init(struct kplotctx *);
void kplotctx_margin_init(struct kplotctx *);
void kplotctx_tic_init(struct kplotctx *);
void kplotctx_label_init(struct kplotctx *);
double kplotctx_line_fix(const struct kplotctx *, double, double);
void kplotctx_font_init(struct kplotctx *, struct kplotfont *);
void kplotctx_line_init(struct kplotctx *, struct kplotline *);
void kplotctx_point_init(struct kplotctx *, struct kplotpoint *);
void kplotctx_ticln_init(struct kplotctx *, struct kplotticln *);
void kplotccfg_init_palette(struct kplotccfg *, size_t);
__END_DECLS
#endif