| line | stmt | bran | cond | sub | pod | time | code | 
| 1 |  |  |  |  |  |  | package Protocol::DBus::Pack; | 
| 2 |  |  |  |  |  |  |  | 
| 3 | 8 |  |  | 8 |  | 41 | use strict; | 
|  | 8 |  |  |  |  | 9 |  | 
|  | 8 |  |  |  |  | 178 |  | 
| 4 | 8 |  |  | 8 |  | 32 | use warnings; | 
|  | 8 |  |  |  |  | 10 |  | 
|  | 8 |  |  |  |  | 249 |  | 
| 5 |  |  |  |  |  |  |  | 
| 6 | 8 |  |  | 8 |  | 31 | use constant CAN_64 => eval { !!pack 'q' }; | 
|  | 8 |  |  |  |  | 10 |  | 
|  | 8 |  |  |  |  | 18 |  | 
|  | 8 |  |  |  |  | 617 |  | 
| 7 |  |  |  |  |  |  |  | 
| 8 | 8 |  |  |  |  | 655 | use constant NUMERIC => { | 
| 9 |  |  |  |  |  |  | y => 'C',   # uint8 | 
| 10 |  |  |  |  |  |  | b => 'L',   # boolean (uint32) | 
| 11 |  |  |  |  |  |  | n => 's',   # int16 | 
| 12 |  |  |  |  |  |  | q => 'S',   # uint16 | 
| 13 |  |  |  |  |  |  | i => 'l',   # int32 | 
| 14 |  |  |  |  |  |  | u => 'L',   # uint32 | 
| 15 |  |  |  |  |  |  | x => 'q',   # int64 | 
| 16 |  |  |  |  |  |  | t => 'Q',   # uint64 | 
| 17 |  |  |  |  |  |  | d => 'd',   # double float (?) | 
| 18 |  |  |  |  |  |  | h => 'L',   # unix fd, uint32 | 
| 19 | 8 |  |  | 8 |  | 42 | }; | 
|  | 8 |  |  |  |  | 14 |  | 
| 20 |  |  |  |  |  |  |  | 
| 21 | 8 |  |  |  |  | 837 | use constant STRING => { | 
| 22 |  |  |  |  |  |  | s => 'L/a x', | 
| 23 |  |  |  |  |  |  | o => 'L/a x', | 
| 24 |  |  |  |  |  |  | g => 'C/a x', | 
| 25 | 8 |  |  | 8 |  | 41 | }; | 
|  | 8 |  |  |  |  | 13 |  | 
| 26 |  |  |  |  |  |  |  | 
| 27 |  |  |  |  |  |  | use constant WIDTH => { | 
| 28 |  |  |  |  |  |  |  | 
| 29 |  |  |  |  |  |  | # Accommodate 32-bit Perls: | 
| 30 | 80 | 100 | 100 |  |  | 367 | (map { $_ => ($_ eq 'x' || $_ eq 't') ? 8 : length pack NUMERIC()->{$_} } keys %{ NUMERIC() }), | 
|  | 8 |  |  |  |  | 38 |  | 
| 31 | 8 |  |  |  |  | 8 | (map { $_ => length pack STRING()->{$_} } keys %{ STRING() }), | 
|  | 24 |  |  |  |  | 784 |  | 
|  | 8 |  |  |  |  | 52 |  | 
| 32 | 8 |  |  | 8 |  | 41 | }; | 
|  | 8 |  |  |  |  | 15 |  | 
| 33 |  |  |  |  |  |  |  | 
| 34 |  |  |  |  |  |  | use constant ALIGNMENT => { | 
| 35 | 8 |  |  |  |  | 30 | %{ WIDTH() }, | 
| 36 | 8 |  |  |  |  | 15 | map { $_ => length pack( substr( STRING()->{$_}, 0, 1 ) ) } keys %{ STRING() }, | 
|  | 24 |  |  |  |  | 1123 |  | 
|  | 8 |  |  |  |  | 17 |  | 
| 37 | 8 |  |  | 8 |  | 52 | }; | 
|  | 8 |  |  |  |  | 10 |  | 
| 38 |  |  |  |  |  |  |  | 
| 39 |  |  |  |  |  |  | # Increments the 1st arg in-place to align on a boundary of the 2nd arg. | 
| 40 |  |  |  |  |  |  | # ex. align( 7, 8 ) will change the $_[0] to be 8. | 
| 41 |  |  |  |  |  |  | sub align { | 
| 42 | 1942 | 100 |  | 1942 | 0 | 2859 | if ($_[0] % $_[1]) { | 
| 43 | 242 |  |  |  |  | 342 | $_[0] += ($_[1] - ($_[0] % $_[1])); | 
| 44 |  |  |  |  |  |  | } | 
| 45 |  |  |  |  |  |  | } | 
| 46 |  |  |  |  |  |  |  | 
| 47 |  |  |  |  |  |  | sub align_str { | 
| 48 | 295 | 100 |  | 295 | 0 | 527 | if (my $mod = length($_[0]) % $_[1]) { | 
| 49 | 44 |  |  |  |  | 87 | $_[0] .= "\0" x ($_[1] - $mod); | 
| 50 |  |  |  |  |  |  | } | 
| 51 |  |  |  |  |  |  | } | 
| 52 |  |  |  |  |  |  |  | 
| 53 |  |  |  |  |  |  | 1; |