diff options
author | Bdale Garbee <bdale@gag.com> | 2009-09-06 14:02:09 -0600 |
---|---|---|
committer | Bdale Garbee <bdale@gag.com> | 2009-09-06 14:02:09 -0600 |
commit | d42ebf0661ecf15455e5051de1e16ae66f8dd857 (patch) | |
tree | 3ccf4e792da4655c79bff99fd5fc1308f46f4c8d /ao-tools/lib/cc-analyse.c | |
parent | 384dbe9fc7fa8e4e5dceec5e150f0f1d3383bbdc (diff) | |
parent | 7a19aac5e881e635962a64fff73027ca2143b96f (diff) |
Merge branch 'master' of ssh://git.gag.com/scm/git/fw/altos
Diffstat (limited to 'ao-tools/lib/cc-analyse.c')
-rw-r--r-- | ao-tools/lib/cc-analyse.c | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/ao-tools/lib/cc-analyse.c b/ao-tools/lib/cc-analyse.c index fc8a8417..0e020115 100644 --- a/ao-tools/lib/cc-analyse.c +++ b/ao-tools/lib/cc-analyse.c @@ -16,6 +16,7 @@ */ #include "cc.h" +#include <math.h> int cc_timedata_min(struct cc_timedata *d, double min_time, double max_time) @@ -56,3 +57,59 @@ cc_timedata_max(struct cc_timedata *d, double min_time, double max_time) } return max_i; } + +int +cc_perioddata_min(struct cc_perioddata *d, double min_time, double max_time) +{ + int start, stop; + int i; + double min; + int min_i; + + if (d->num == 0) + return -1; + start = (int) ceil((min_time - d->start) / d->step); + if (start < 0) + start = 0; + stop = (int) floor((max_time - d->start) / d->step); + if (stop >= d->num) + stop = d->num - 1; + if (stop < start) + return -1; + min = d->data[start]; + min_i = start; + for (i = start + 1; i <= stop; i++) + if (d->data[i] < min) { + min = d->data[i]; + min_i = i; + } + return min_i; +} + +int +cc_perioddata_max(struct cc_perioddata *d, double min_time, double max_time) +{ + int start, stop; + int i; + double max; + int max_i; + + if (d->num == 0) + return -1; + start = (int) ceil((min_time - d->start) / d->step); + if (start < 0) + start = 0; + stop = (int) floor((max_time - d->start) / d->step); + if (stop >= d->num) + stop = d->num - 1; + if (stop < start) + return -1; + max = d->data[start]; + max_i = start; + for (i = start + 1; i <= stop; i++) + if (fabs(d->data[i]) > max) { + max = fabs(d->data[i]); + max_i = i; + } + return max_i; +} |