* routines for time statistics
* Copyrigth 2003 Lars Roland
*
- * $Id: timestats.c,v 1.2 2003/09/03 10:10:17 sahlberg Exp $
+ * $Id$
*
- * Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@ethereal.com>
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
* Copyright 1998 Gerald Combs
*
* This program is free software; you can redistribute it and/or
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include "timestats.h"
-
-/*
- * function: get_timedelta
- * delta = b - a
- */
-
-void get_timedelta(nstime_t *delta, nstime_t *b, nstime_t *a )
-{
- delta->secs = b->secs - a->secs;
- delta->nsecs= b->nsecs - a->nsecs;
- if(delta->nsecs<0){
- delta->nsecs+=1000000000;
- delta->secs--;
- }
-}
-
-/*
- * function: addtime
- * sum += a
- */
-
-void addtime(nstime_t *sum, nstime_t *a)
-{
- sum->secs += a->secs;
- sum->nsecs += a->nsecs;
- if(sum->nsecs>1000000000){
- sum->nsecs-=1000000000;
- sum->secs++;
- }
-}
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
-/*
- * function: nstime_to_msec
- * converts nstime to gdouble, time base is milli seconds
- */
+#include "timestats.h"
-gdouble nstime_to_msec(nstime_t *time)
+/* Initialize a timestat_t struct */
+void
+time_stat_init(timestat_t *stats)
{
- return ((double)time->secs*1000 + (double)time->nsecs/1000000);
+ stats->num = 0;
+ stats->min_num = 0;
+ stats->max_num = 0;
+ nstime_set_zero(&stats->min);
+ nstime_set_zero(&stats->max);
+ nstime_set_zero(&stats->tot);
+ stats->variance = 0.0;
}
-/* A Function to update a timestat_t struct with a new sample*/
-
+/* Update a timestat_t struct with a new sample */
void
-time_stat_update(timestat_t *stats, nstime_t *delta, packet_info *pinfo)
+time_stat_update(timestat_t *stats, const nstime_t *delta, packet_info *pinfo)
{
if(stats->num==0){
- stats->max.secs=delta->secs;
- stats->max.nsecs=delta->nsecs;
+ stats->max=*delta;
stats->max_num=pinfo->fd->num;
- }
-
- if(stats->num==0){
- stats->min.secs=delta->secs;
- stats->min.nsecs=delta->nsecs;
+ stats->min=*delta;
stats->min_num=pinfo->fd->num;
}
if( (delta->secs<stats->min.secs)
||( (delta->secs==stats->min.secs)
&&(delta->nsecs<stats->min.nsecs) ) ){
- stats->min.secs=delta->secs;
- stats->min.nsecs=delta->nsecs;
+ stats->min=*delta;
stats->min_num=pinfo->fd->num;
}
if( (delta->secs>stats->max.secs)
||( (delta->secs==stats->max.secs)
&&(delta->nsecs>stats->max.nsecs) ) ){
- stats->max.secs=delta->secs;
- stats->max.nsecs=delta->nsecs;
+ stats->max=*delta;
stats->max_num=pinfo->fd->num;
}
- stats->tot.secs += delta->secs;
- stats->tot.nsecs += delta->nsecs;
- if(stats->tot.nsecs>1000000000){
- stats->tot.nsecs-=1000000000;
- stats->tot.secs++;
- }
+ nstime_add(&stats->tot, delta);
stats->num++;
}
* returns the average as a gdouble , time base is milli seconds
*/
-gdouble get_average(nstime_t *sum, guint32 num)
+gdouble get_average(const nstime_t *sum, guint32 num)
{
gdouble average;