Changeset 15606
- Timestamp:
- 07/10/08 14:28:25 (5 years ago)
- Location:
- lang/perl/Data-Valve/trunk
- Files:
-
- 5 modified
-
Valve.xs (modified) (2 diffs)
-
dv_bucket.c (modified) (8 diffs)
-
dv_bucket.h (modified) (2 diffs)
-
lib/Data/Valve/Bucket.pm (modified) (1 diff)
-
t/02_bucket.t (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
lang/perl/Data-Valve/trunk/Valve.xs
r15605 r15606 8 8 9 9 dv_bucket * 10 dv_bucket_create( floatinterval, unsigned long max)10 dv_bucket_create(double interval, unsigned long max) 11 11 12 12 void … … 24 24 dv_bucket_first(dv_bucket *bucket) 25 25 26 long 27 dv_bucket_max_items(dv_bucket *bucket) 28 29 double 30 dv_bucket_interval(dv_bucket *bucket) 31 32 SV * 33 dv_bucket_serialize(dv_bucket *bucket) 34 35 dv_bucket * 36 dv_bucket__deserialize(SV *buf, float interval, long max) 37 PREINIT: 38 STRLEN len; 39 char *c_buf = (char *)SvPV(ST(0), len); 40 CODE: 41 RETVAL = dv_bucket_deserialize(buf, len, interval, max); 42 OUTPUT: 43 RETVAL 44 45 26 46 MODULE = Data::Valve PACKAGE = Data::Valve::BucketItem PREFIX = dv_bucket_item_ 27 47 -
lang/perl/Data-Valve/trunk/dv_bucket.c
r15605 r15606 3 3 4 4 #include "dv_bucket.h" 5 #include "EXTERN.h" 6 #include "perl.h" 5 7 #include <stdio.h> 6 8 … … 16 18 17 19 dv_bucket_item * 18 dv_bucket_item_create( struct timeval *tp)20 dv_bucket_item_create(double time) 19 21 { 20 22 dv_bucket_item *item; … … 22 24 item = (dv_bucket_item *) malloc( sizeof(dv_bucket_item) ); 23 25 item->next = NULL; 24 item->time = dv_bucket_timeval2double(tp);26 item->time = time; 25 27 return item; 26 28 } … … 33 35 34 36 dv_bucket* 35 dv_bucket_create( floatinterval, unsigned long max)37 dv_bucket_create(double interval, unsigned long max) 36 38 { 37 39 dv_bucket *bucket; … … 39 41 bucket = (dv_bucket *) malloc( sizeof(dv_bucket)); 40 42 bucket->max = max; 41 bucket->interval = (long)interval * DV_1E6;43 bucket->interval = interval * DV_1E6; 42 44 bucket->count = 0; 43 45 bucket->head = NULL; 44 46 bucket->tail = NULL; 45 47 return bucket; 48 } 49 50 long 51 dv_bucket_max_items(dv_bucket *bucket) 52 { 53 return bucket->max; 54 } 55 56 double 57 dv_bucket_interval(dv_bucket *bucket) 58 { 59 return bucket->interval / DV_1E6; 46 60 } 47 61 … … 131 145 132 146 void 133 dv_bucket_push(dv_bucket *bucket, struct timeval *tp)134 { 135 dv_bucket_item *item = dv_bucket_item_create(t p);147 dv_bucket_push(dv_bucket *bucket, double time) 148 { 149 dv_bucket_item *item = dv_bucket_item_create(time); 136 150 if (bucket->count == 0) { 137 151 bucket->head = item; … … 155 169 156 170 if ( dv_bucket_count( bucket ) == 0 ) { 157 dv_bucket_push( bucket, &t);171 dv_bucket_push( bucket, dv_bucket_timeval2double(&t) ); 158 172 return 1; 159 173 } … … 163 177 } 164 178 165 dv_bucket_push( bucket, &t);179 dv_bucket_push( bucket, dv_bucket_timeval2double(&t) ); 166 180 return 1; 167 181 } 182 183 SV * 184 dv_bucket_serialize(dv_bucket *bucket) 185 { 186 SV *sv = newSVpv("[", 1); 187 dv_bucket_item *item = bucket->head; 188 189 while (item) { 190 sv_catpvf(sv, "%f%s", item->time, item->next ? "," : ""); 191 item = item->next; 192 } 193 194 sv_catpv(sv, "]"); 195 return sv; 196 } 197 198 dv_bucket * 199 dv_bucket_deserialize(char *buf, size_t len, double interval, unsigned long max) 200 { 201 dv_bucket *bucket = dv_bucket_create(interval, max); 202 char *start; 203 char *end = buf + len; 204 205 if (buf != end && *buf == '[') { 206 buf++; 207 while (buf != end && !isdigit(*buf)) { 208 buf++; 209 } 210 } 211 212 while (buf != end) { 213 start = buf; 214 while ((isdigit(*buf) || *buf == '.' ) ) { 215 buf++; 216 } 217 dv_bucket_push(bucket, strtod(buf, NULL)); 218 219 while ( buf != end && ! isdigit(*buf)) { 220 buf++; 221 } 222 } 223 return bucket; 224 } 225 168 226 169 227 dv_bucket_item * -
lang/perl/Data-Valve/trunk/dv_bucket.h
r15605 r15606 14 14 typedef struct dv_bucket { 15 15 unsigned long max; 16 unsigned longinterval;16 double interval; 17 17 unsigned long count; 18 18 dv_bucket_item *head; … … 21 21 22 22 /* Creates a new bucket */ 23 dv_bucket *dv_bucket_create( floatinterval, unsigned long max);23 dv_bucket *dv_bucket_create(double interval, unsigned long max); 24 24 25 25 #endif /* __DV_BUCKET_H__ */ -
lang/perl/Data-Valve/trunk/lib/Data/Valve/Bucket.pm
r15597 r15606 9 9 10 10 return $self; 11 } 12 13 sub deserialize { 14 my ($class, @args) = @_; 15 return bless _deserialize(@args), $class; 11 16 } 12 17 -
lang/perl/Data-Valve/trunk/t/02_bucket.t
r15605 r15606 1 1 use strict; 2 use Test::More (tests => 2 0);2 use Test::More (tests => 24); 3 3 4 4 BEGIN … … 15 15 ok($bucket); 16 16 isa_ok($bucket, "Data::Valve::Bucket"); 17 ok($bucket->interval == 10, "interval is 10"); 17 18 } 18 19 … … 40 41 ok(! $item->next ); 41 42 43 my $serialized = $bucket->serialize(); 44 like($serialized, qr/^\[(?:(?:[\d\.]+,?))+\]$/, "serialization format ok"); 45 46 my $bucket2 = Data::Valve::Bucket->deserialize($serialized, 10, 5); 47 48 is($bucket2->interval, 10, "interval is 10"); 49 is($bucket2->max_items, 5, "max_items is 5"); 42 50 }
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)