1
+ function Binary ( ) {
2
+ }
3
+
4
+ var int_sym = "int" ;
5
+ var int16_sym = "int16" ;
6
+ var int32_sym = "int32" ;
7
+ var string_sym = "string" ;
8
+
9
+ Binary . prototype . pack = function ( fields , buff , offset ) {
10
+ var e = fields . length + 1 ;
11
+ var i = offset ;
12
+ var next = 0 ;
13
+ while ( -- e ) {
14
+ var field = fields [ next ++ ] ;
15
+ if ( string_sym in field ) {
16
+ buff . asciiWrite ( field . string , i ) ;
17
+ i += field . string . length ;
18
+ }
19
+ else if ( int_sym in field ) {
20
+ buff [ i ++ ] = field . int & 0xff ;
21
+ }
22
+ else if ( int16_sym in field ) {
23
+ buff [ i ++ ] = ( field . int16 >> 8 ) & 0xff ;
24
+ buff [ i ++ ] = field . int16 & 0xff ;
25
+ }
26
+ else if ( int32_sym in field ) {
27
+ buff [ i ++ ] = ( field . int32 >> 24 ) & 0xff ;
28
+ buff [ i ++ ] = ( field . int32 >> 16 ) & 0xff ;
29
+ buff [ i ++ ] = ( field . int32 >> 8 ) & 0xff ;
30
+ buff [ i ++ ] = field . int32 & 0xff ;
31
+ }
32
+ }
33
+ return ( i - offset ) ;
34
+ }
35
+
36
+ Binary . prototype . unpack = function ( pattern , offset , buff ) {
37
+ var len = pattern . length ;
38
+ var i = offset ;
39
+ var pi = 0 ;
40
+ var res = [ ] ;
41
+ while ( pi < len ) {
42
+ switch ( pattern [ pi ] ) {
43
+ case "N" :
44
+ res . push ( ( buff [ i ++ ] << 24 ) + ( buff [ i ++ ] << 16 ) + ( buff [ i ++ ] << 8 ) + buff [ i ++ ] ) ;
45
+ pi ++ ;
46
+ break ;
47
+ case "n" :
48
+ res . push ( ( buff [ i ++ ] << 8 ) + buff [ i ++ ] ) ;
49
+ pi ++ ;
50
+ break ;
51
+ case "o" :
52
+ res . push ( buff [ i ++ ] ) ;
53
+ pi ++ ;
54
+ break ;
55
+ case "s" :
56
+ case "a" :
57
+ var slen = 1 ;
58
+ var tmp = 0 ;
59
+ while ( true ) {
60
+ tmp = pattern [ pi + slen ] ;
61
+ if ( ! ( tmp >= "0" && tmp <= "9" ) ) {
62
+ break ;
63
+ }
64
+ slen ++ ;
65
+ }
66
+ var strlen = parseInt ( pattern . substring ( pi + 1 , pi + slen ) ) ;
67
+ res . push ( buff . asciiSlice ( i , i + strlen ) ) ;
68
+ i += strlen ;
69
+ pi += slen ;
70
+ break ;
71
+ case "u" :
72
+ break ;
73
+ }
74
+ }
75
+ return res ;
76
+ }
77
+
78
+ exports . Binary = Binary ;
0 commit comments