Introduction
Introduction Statistics Contact Development Disclaimer Help
fix ring buffer - ploot - simple plotting tools
git clone git://bitreich.org/ploot git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65…
Log
Files
Refs
Tags
README
LICENSE
---
commit 413abf823787458e35396a700f9acf1af53ef239
parent 30b3f9c326b35c196f98d905c6e57afbc057c63b
Author: Josuah Demangeon <[email protected]>
Date: Tue, 6 Feb 2018 11:36:00 +0100
fix ring buffer
Diffstat:
M ploot.c | 82 +++++++++++++++++------------…
D ploot.core | 0
2 files changed, 45 insertions(+), 37 deletions(-)
---
diff --git a/ploot.c b/ploot.c
@@ -14,6 +14,27 @@
#define MIN(x, y) ((x) < (y) ? (x) : (y))
#define LEN(x) (sizeof(x) / sizeof(*x))
+
+/*
+ * Add `val' at the current position `pos' of the `ring' buffer and set pos to
+ * the next postion.
+ */
+#define RING_ADD(rbuf, len, pos, val) \
+do { \
+ rbuf[pos] = val; \
+ pos = (pos + 1 < len) ? (pos + 1) : (0); \
+} while (0)
+
+/*
+ * Copy the ring buffer `rbuf' content with current position `pos' into the
+ * buffer `buf'. Both buffer of length `len'.
+ */
+#define RING_COPY(buf, rbuf, len, pos) \
+do { \
+ memcpy(buf, rbuf + pos, (len - pos) * sizeof(*rbuf)); \
+ memcpy(buf + (len - pos), rbuf, pos * sizeof(*rbuf)); \
+} while (0)
+
int flag_h = 20;
char *flag_t = NULL;
@@ -134,29 +155,6 @@ plot(int height, double *beg, double *end, char *str)
}
/*
- * Add `val' at the current position `pos' of the `ring' buffer and return the
- * next postion.
- */
-size_t
-ring_add(double *rbuf, size_t len, size_t pos, double val)
-{
- *rbuf = val;
-
- return (pos + 1 < len) ? (pos + 1) : (0);
-}
-
-/*
- * Copy the ring buffer `rbuf' content with current position `pos' into the
- * buffer `buf'. Both buffer of length `len'.
- */
-void
-ring_copy(double *buf, double *rbuf, size_t len, size_t pos)
-{
- memcpy(buf, rbuf + pos, (len - pos) * sizeof(*rbuf));
- memcpy(buf + (len - pos), rbuf, pos * sizeof(*rbuf));
-}
-
-/*
* Read a simple format with one double per line and save the last `MAX_WIDTH'
* values into `buf' which must be at least MAX_VAL wide and return a pointer
* to the last element or NULL if the input contains error.
@@ -169,32 +167,39 @@ read_simple(double buf[MAX_VAL])
len = LEN(rbuf);
for (p = pos = 0; scanf("%lf\n", &val) > 0; p++)
- pos = ring_add(rbuf + pos, len, pos, val);
+ RING_ADD(rbuf, len, pos, val);
len = MIN(len, p);
pos = MIN(pos, p);
- ring_copy(buf, rbuf, len, pos);
+ RING_COPY(buf, rbuf, len, pos);
return buf + len;
}
/*
* Read a format with blank-separated time_t-double pairs, one per line and sa…
- * the last `MAX_WIDTH' values into `timev' and `valv' which must both be at
- * least MAX_VAL wide and return a pointer to the last element or NULL if the
+ * the last `MAX_WIDTH' values into `tbuf' and `vbuf' which must both be at
+ * least MAX_VAL wide and return a pointer to the last element of `vbuf' or NU…
* input contains error.
*/
double *
-read_time_series(double *valv, time_t *timev)
+read_time_series(double *vbuf, time_t *tbuf)
{
- time_t time_rbuf[MAX_VAL];
- double val_rbuf[MAX_VAL];
+ size_t p, pos, len;
+ double vrbuf[MAX_VAL], vval;
+ time_t trbuf[MAX_VAL], tval;
- (void)time_rbuf;
- (void)val_rbuf;
- (void)timev;
+ len = LEN(vrbuf);
+ for (p = pos = 0; scanf("%zd %lf\n", &tval, &vval) > 0; p++)
+ RING_ADD(trbuf, len, pos, tval);
+ RING_ADD(vrbuf, len, pos, vval);
+ len = MIN(len, p);
+ pos = MIN(pos, p);
+
+ RING_COPY(tbuf, trbuf, len, pos);
+ RING_COPY(vbuf, vrbuf, len, pos);
- return valv;
+ return vbuf + len;
}
void
@@ -207,7 +212,10 @@ usage(void)
int
main(int argc, char **argv)
{
- double val[MAX_VAL], *end;
+/*
+ time_t tbuf[MAX_VAL];
+*/
+ double vbuf[MAX_VAL], *vend;
char c;
while ((c = getopt(argc, argv, "h:t:")) != -1) {
@@ -226,7 +234,7 @@ main(int argc, char **argv)
}
}
- end = read_simple(val);
- plot(flag_h, val, end, flag_t);
+ vend = read_simple(vbuf);
+ plot(flag_h, vbuf, vend, flag_t);
return 0;
}
diff --git a/ploot.core b/ploot.core
Binary files differ.
You are viewing proxied material from bitreich.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.