Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
D
douban-api-proxy
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
captainwong
douban-api-proxy
Commits
867aa2f0
Commit
867aa2f0
authored
May 13, 2019
by
subdiox
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Beautify bitjs
parent
7982ed87
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
2777 additions
and
2690 deletions
+2777
-2690
archive.js
cps/static/js/archive/archive.js
+352
-344
rarvm.js
cps/static/js/archive/rarvm.js
+601
-561
unrar.js
cps/static/js/archive/unrar.js
+1037
-1036
untar.js
cps/static/js/archive/untar.js
+136
-136
unzip.js
cps/static/js/archive/unzip.js
+181
-139
bitstream.js
cps/static/js/io/bitstream.js
+218
-220
bytebuffer.js
cps/static/js/io/bytebuffer.js
+105
-106
bytestream.js
cps/static/js/io/bytestream.js
+147
-148
No files found.
cps/static/js/archive/archive.js
View file @
867aa2f0
This diff is collapsed.
Click to expand it.
cps/static/js/archive/rarvm.js
View file @
867aa2f0
...
...
@@ -34,8 +34,8 @@ function CRC(startCRC, arr) {
InitCRC
();
}
/*
#if defined(LITTLE_ENDIAN) && defined(PRESENT_INT32) && defined(ALLOW_NOT_ALIGNED_INT)
/*
#if defined(LITTLE_ENDIAN) && defined(PRESENT_INT32) && defined(ALLOW_NOT_ALIGNED_INT)
while (Size>0 && ((long)Data & 7))
{
StartCRC=CRCTab[(byte)(StartCRC^Data[0])]^(StartCRC>>8);
...
...
@@ -57,8 +57,8 @@ function CRC(startCRC, arr) {
Data+=8;
Size-=8;
}
#endif
*/
#endif
*/
for
(
var
i
=
0
;
i
<
arr
.
length
;
++
i
)
{
var
byte
=
((
startCRC
^
arr
[
i
])
>>>
0
)
&
0xff
;
...
...
@@ -126,14 +126,14 @@ var VM_Commands = {
VM_SBB
:
38
,
VM_PRINT
:
39
,
/*
#ifdef VM_OPTIMIZE
/*
#ifdef VM_OPTIMIZE
VM_MOVB, VM_MOVD, VM_CMPB, VM_CMPD,
VM_ADDB, VM_ADDD, VM_SUBB, VM_SUBD, VM_INCB, VM_INCD, VM_DECB, VM_DECD,
VM_NEGB, VM_NEGD,
#endif
*/
#endif
*/
// TODO: This enum value would be much larger if VM_OPTIMIZE.
VM_STANDARD
:
40
,
...
...
@@ -224,11 +224,11 @@ VM_PreparedOperand.prototype.toString = function() {
if
(
this
.
Type
===
null
)
{
return
'Error: Type was null in VM_PreparedOperand'
;
}
return
'{ '
+
'Type: '
+
getDebugString
(
VM_OpType
,
this
.
Type
)
+
', Data: '
+
this
.
Data
+
', Base: '
+
this
.
Base
+
' }'
;
return
'{ '
+
'Type: '
+
getDebugString
(
VM_OpType
,
this
.
Type
)
+
', Data: '
+
this
.
Data
+
', Base: '
+
this
.
Base
+
' }'
;
};
/**
...
...
@@ -255,12 +255,12 @@ VM_PreparedCommand.prototype.toString = function(indent) {
return
'Error: OpCode was null in VM_PreparedCommand'
;
}
indent
=
indent
||
''
;
return
indent
+
'{
\
n'
+
indent
+
' OpCode: '
+
getDebugString
(
VM_Commands
,
this
.
OpCode
)
+
',
\
n'
+
indent
+
' ByteMode: '
+
this
.
ByteMode
+
',
\
n'
+
indent
+
' Op1: '
+
this
.
Op1
.
toString
()
+
',
\
n'
+
indent
+
' Op2: '
+
this
.
Op2
.
toString
()
+
',
\
n'
+
indent
+
'}'
;
return
indent
+
'{
\
n'
+
indent
+
' OpCode: '
+
getDebugString
(
VM_Commands
,
this
.
OpCode
)
+
',
\
n'
+
indent
+
' ByteMode: '
+
this
.
ByteMode
+
',
\
n'
+
indent
+
' Op1: '
+
this
.
Op1
.
toString
()
+
',
\
n'
+
indent
+
' Op2: '
+
this
.
Op2
.
toString
()
+
',
\
n'
+
indent
+
'}'
;
};
/**
...
...
@@ -339,46 +339,86 @@ var VMCF_USEFLAGS = 32;
var
VMCF_CHFLAGS
=
64
;
var
VM_CmdFlags
=
[
/* VM_MOV */
VMCF_OP2
|
VMCF_BYTEMODE
,
/* VM_CMP */
VMCF_OP2
|
VMCF_BYTEMODE
|
VMCF_CHFLAGS
,
/* VM_ADD */
VMCF_OP2
|
VMCF_BYTEMODE
|
VMCF_CHFLAGS
,
/* VM_SUB */
VMCF_OP2
|
VMCF_BYTEMODE
|
VMCF_CHFLAGS
,
/* VM_JZ */
VMCF_OP1
|
VMCF_JUMP
|
VMCF_USEFLAGS
,
/* VM_JNZ */
VMCF_OP1
|
VMCF_JUMP
|
VMCF_USEFLAGS
,
/* VM_INC */
VMCF_OP1
|
VMCF_BYTEMODE
|
VMCF_CHFLAGS
,
/* VM_DEC */
VMCF_OP1
|
VMCF_BYTEMODE
|
VMCF_CHFLAGS
,
/* VM_JMP */
VMCF_OP1
|
VMCF_JUMP
,
/* VM_XOR */
VMCF_OP2
|
VMCF_BYTEMODE
|
VMCF_CHFLAGS
,
/* VM_AND */
VMCF_OP2
|
VMCF_BYTEMODE
|
VMCF_CHFLAGS
,
/* VM_OR */
VMCF_OP2
|
VMCF_BYTEMODE
|
VMCF_CHFLAGS
,
/* VM_TEST */
VMCF_OP2
|
VMCF_BYTEMODE
|
VMCF_CHFLAGS
,
/* VM_JS */
VMCF_OP1
|
VMCF_JUMP
|
VMCF_USEFLAGS
,
/* VM_JNS */
VMCF_OP1
|
VMCF_JUMP
|
VMCF_USEFLAGS
,
/* VM_JB */
VMCF_OP1
|
VMCF_JUMP
|
VMCF_USEFLAGS
,
/* VM_JBE */
VMCF_OP1
|
VMCF_JUMP
|
VMCF_USEFLAGS
,
/* VM_JA */
VMCF_OP1
|
VMCF_JUMP
|
VMCF_USEFLAGS
,
/* VM_JAE */
VMCF_OP1
|
VMCF_JUMP
|
VMCF_USEFLAGS
,
/* VM_PUSH */
VMCF_OP1
,
/* VM_POP */
VMCF_OP1
,
/* VM_CALL */
VMCF_OP1
|
VMCF_PROC
,
/* VM_RET */
VMCF_OP0
|
VMCF_PROC
,
/* VM_NOT */
VMCF_OP1
|
VMCF_BYTEMODE
,
/* VM_SHL */
VMCF_OP2
|
VMCF_BYTEMODE
|
VMCF_CHFLAGS
,
/* VM_SHR */
VMCF_OP2
|
VMCF_BYTEMODE
|
VMCF_CHFLAGS
,
/* VM_SAR */
VMCF_OP2
|
VMCF_BYTEMODE
|
VMCF_CHFLAGS
,
/* VM_NEG */
VMCF_OP1
|
VMCF_BYTEMODE
|
VMCF_CHFLAGS
,
/* VM_PUSHA */
VMCF_OP0
,
/* VM_POPA */
VMCF_OP0
,
/* VM_PUSHF */
VMCF_OP0
|
VMCF_USEFLAGS
,
/* VM_POPF */
VMCF_OP0
|
VMCF_CHFLAGS
,
/* VM_MOVZX */
VMCF_OP2
,
/* VM_MOVSX */
VMCF_OP2
,
/* VM_XCHG */
VMCF_OP2
|
VMCF_BYTEMODE
,
/* VM_MUL */
VMCF_OP2
|
VMCF_BYTEMODE
,
/* VM_DIV */
VMCF_OP2
|
VMCF_BYTEMODE
,
/* VM_ADC */
VMCF_OP2
|
VMCF_BYTEMODE
|
VMCF_USEFLAGS
|
VMCF_CHFLAGS
,
/* VM_SBB */
VMCF_OP2
|
VMCF_BYTEMODE
|
VMCF_USEFLAGS
|
VMCF_CHFLAGS
,
/* VM_PRINT */
VMCF_OP0
,
/* VM_MOV */
VMCF_OP2
|
VMCF_BYTEMODE
,
/* VM_CMP */
VMCF_OP2
|
VMCF_BYTEMODE
|
VMCF_CHFLAGS
,
/* VM_ADD */
VMCF_OP2
|
VMCF_BYTEMODE
|
VMCF_CHFLAGS
,
/* VM_SUB */
VMCF_OP2
|
VMCF_BYTEMODE
|
VMCF_CHFLAGS
,
/* VM_JZ */
VMCF_OP1
|
VMCF_JUMP
|
VMCF_USEFLAGS
,
/* VM_JNZ */
VMCF_OP1
|
VMCF_JUMP
|
VMCF_USEFLAGS
,
/* VM_INC */
VMCF_OP1
|
VMCF_BYTEMODE
|
VMCF_CHFLAGS
,
/* VM_DEC */
VMCF_OP1
|
VMCF_BYTEMODE
|
VMCF_CHFLAGS
,
/* VM_JMP */
VMCF_OP1
|
VMCF_JUMP
,
/* VM_XOR */
VMCF_OP2
|
VMCF_BYTEMODE
|
VMCF_CHFLAGS
,
/* VM_AND */
VMCF_OP2
|
VMCF_BYTEMODE
|
VMCF_CHFLAGS
,
/* VM_OR */
VMCF_OP2
|
VMCF_BYTEMODE
|
VMCF_CHFLAGS
,
/* VM_TEST */
VMCF_OP2
|
VMCF_BYTEMODE
|
VMCF_CHFLAGS
,
/* VM_JS */
VMCF_OP1
|
VMCF_JUMP
|
VMCF_USEFLAGS
,
/* VM_JNS */
VMCF_OP1
|
VMCF_JUMP
|
VMCF_USEFLAGS
,
/* VM_JB */
VMCF_OP1
|
VMCF_JUMP
|
VMCF_USEFLAGS
,
/* VM_JBE */
VMCF_OP1
|
VMCF_JUMP
|
VMCF_USEFLAGS
,
/* VM_JA */
VMCF_OP1
|
VMCF_JUMP
|
VMCF_USEFLAGS
,
/* VM_JAE */
VMCF_OP1
|
VMCF_JUMP
|
VMCF_USEFLAGS
,
/* VM_PUSH */
VMCF_OP1
,
/* VM_POP */
VMCF_OP1
,
/* VM_CALL */
VMCF_OP1
|
VMCF_PROC
,
/* VM_RET */
VMCF_OP0
|
VMCF_PROC
,
/* VM_NOT */
VMCF_OP1
|
VMCF_BYTEMODE
,
/* VM_SHL */
VMCF_OP2
|
VMCF_BYTEMODE
|
VMCF_CHFLAGS
,
/* VM_SHR */
VMCF_OP2
|
VMCF_BYTEMODE
|
VMCF_CHFLAGS
,
/* VM_SAR */
VMCF_OP2
|
VMCF_BYTEMODE
|
VMCF_CHFLAGS
,
/* VM_NEG */
VMCF_OP1
|
VMCF_BYTEMODE
|
VMCF_CHFLAGS
,
/* VM_PUSHA */
VMCF_OP0
,
/* VM_POPA */
VMCF_OP0
,
/* VM_PUSHF */
VMCF_OP0
|
VMCF_USEFLAGS
,
/* VM_POPF */
VMCF_OP0
|
VMCF_CHFLAGS
,
/* VM_MOVZX */
VMCF_OP2
,
/* VM_MOVSX */
VMCF_OP2
,
/* VM_XCHG */
VMCF_OP2
|
VMCF_BYTEMODE
,
/* VM_MUL */
VMCF_OP2
|
VMCF_BYTEMODE
,
/* VM_DIV */
VMCF_OP2
|
VMCF_BYTEMODE
,
/* VM_ADC */
VMCF_OP2
|
VMCF_BYTEMODE
|
VMCF_USEFLAGS
|
VMCF_CHFLAGS
,
/* VM_SBB */
VMCF_OP2
|
VMCF_BYTEMODE
|
VMCF_USEFLAGS
|
VMCF_CHFLAGS
,
/* VM_PRINT */
VMCF_OP0
,
];
...
...
@@ -522,8 +562,8 @@ RarVM.prototype.execute = function(prg) {
}
var
dataView
=
new
DataView
(
this
.
mem_
.
buffer
,
VM_GLOBALMEMADDR
);
var
newBlockPos
=
dataView
.
getUint32
(
0x20
,
true
/* little endian */
)
&
VM_MEMMASK
;
var
newBlockSize
=
dataView
.
getUint32
(
0x1c
,
true
/* little endian */
)
&
VM_MEMMASK
;
var
newBlockPos
=
dataView
.
getUint32
(
0x20
,
true
/* little endian */
)
&
VM_MEMMASK
;
var
newBlockSize
=
dataView
.
getUint32
(
0x1c
,
true
/* little endian */
)
&
VM_MEMMASK
;
if
(
newBlockPos
+
newBlockSize
>=
VM_MEMSIZE
)
{
newBlockPos
=
newBlockSize
=
0
;
}
...
...
@@ -585,7 +625,7 @@ RarVM.prototype.executeStandardFilter = function(filterType) {
//SET_VALUE(false,&Mem[VM_GLOBALMEMADDR+0x20],DataSize);
var
dataView
=
new
DataView
(
this
.
mem_
.
buffer
,
VM_GLOBALMEMADDR
);
dataView
.
setUint32
(
0x20
,
dataSize
,
true
/* little endian */
);
dataView
.
setUint32
(
0x20
,
dataSize
,
true
/* little endian */
);
if
(
dataSize
>=
VM_GLOBALMEMADDR
/
2
)
{
break
;
...
...
@@ -618,10 +658,10 @@ RarVM.prototype.prepare = function(code, prg) {
//InitBitInput();
//memcpy(InBuf,Code,Min(CodeSize,BitInput::MAX_SIZE));
var
bstream
=
new
bitjs
.
io
.
BitStream
(
code
.
buffer
,
true
/* rtl */
);
var
bstream
=
new
bitjs
.
io
.
BitStream
(
code
.
buffer
,
true
/* rtl */
);
// Calculate the single byte XOR checksum to check validity of VM code.
var
xorSum
=
0
;
var
xorSum
=
0
;
for
(
var
i
=
1
;
i
<
codeSize
;
++
i
)
{
xorSum
^=
code
[
i
];
}
...
...
@@ -690,7 +730,7 @@ RarVM.prototype.prepare = function(code, prg) {
if
(
opNum
==
2
)
{
this
.
decodeArg
(
curCmd
.
Op2
,
curCmd
.
ByteMode
,
bstream
);
// reading the second operand
}
else
{
if
(
curCmd
.
Op1
.
Type
==
VM_OpType
.
VM_OPINT
&&
(
VM_CmdFlags
[
curCmd
.
OpCode
]
&
(
VMCF_JUMP
|
VMCF_PROC
)))
{
if
(
curCmd
.
Op1
.
Type
==
VM_OpType
.
VM_OPINT
&&
(
VM_CmdFlags
[
curCmd
.
OpCode
]
&
(
VMCF_JUMP
|
VMCF_PROC
)))
{
// Calculating jump distance.
var
distance
=
curCmd
.
Op1
.
Data
;
if
(
distance
>=
256
)
{
...
...
@@ -740,11 +780,11 @@ RarVM.prototype.prepare = function(code, prg) {
}
}
/*
#ifdef VM_OPTIMIZE
/*
#ifdef VM_OPTIMIZE
if (CodeSize!=0)
Optimize(Prg);
#endif
#endif
*/
};
...
...
cps/static/js/archive/unrar.js
View file @
867aa2f0
This diff is collapsed.
Click to expand it.
cps/static/js/archive/untar.js
View file @
867aa2f0
...
...
@@ -133,7 +133,7 @@ var untar = function(arrayBuffer) {
totalFilesInArchive
=
localFiles
.
length
;
// got all local files, now sort them
localFiles
.
sort
(
function
(
a
,
b
)
{
localFiles
.
sort
(
function
(
a
,
b
)
{
var
aname
=
a
.
filename
;
var
bname
=
b
.
filename
;
return
aname
>
bname
?
1
:
-
1
;
...
...
cps/static/js/archive/unzip.js
View file @
867aa2f0
This diff is collapsed.
Click to expand it.
cps/static/js/io/bitstream.js
View file @
867aa2f0
...
...
@@ -8,23 +8,23 @@
* Copyright(c) 2011 Google Inc.
* Copyright(c) 2011 antimatter15
*/
var
bitjs
=
bitjs
||
{};
bitjs
.
io
=
bitjs
.
io
||
{};
(
function
()
{
// mask for getting the Nth bit (zero-based)
bitjs
.
BIT
=
[
0x01
,
0x02
,
0x04
,
0x08
,
// mask for getting the Nth bit (zero-based)
bitjs
.
BIT
=
[
0x01
,
0x02
,
0x04
,
0x08
,
0x10
,
0x20
,
0x40
,
0x80
,
0x100
,
0x200
,
0x400
,
0x800
,
0x1000
,
0x2000
,
0x4000
,
0x8000
];
0x1000
,
0x2000
,
0x4000
,
0x8000
];
// mask for getting N number of bits (0-8)
var
BITMASK
=
[
0
,
0x01
,
0x03
,
0x07
,
0x0F
,
0x1F
,
0x3F
,
0x7F
,
0xFF
];
// mask for getting N number of bits (0-8)
var
BITMASK
=
[
0
,
0x01
,
0x03
,
0x07
,
0x0F
,
0x1F
,
0x3F
,
0x7F
,
0xFF
];
/**
/**
* This bit stream peeks and consumes bits out of a binary stream.
*
* @param {ArrayBuffer} ab An ArrayBuffer object or a Uint8Array.
...
...
@@ -33,7 +33,7 @@ var BITMASK = [0, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF ];
* @param {Number} opt_offset The offset into the ArrayBuffer
* @param {Number} opt_length The length of this BitStream
*/
bitjs
.
io
.
BitStream
=
function
(
ab
,
rtl
,
opt_offset
,
opt_length
)
{
bitjs
.
io
.
BitStream
=
function
(
ab
,
rtl
,
opt_offset
,
opt_length
)
{
if
(
!
ab
||
!
ab
.
toString
||
ab
.
toString
()
!==
"[object ArrayBuffer]"
)
{
throw
"Error! BitArray constructed with an invalid ArrayBuffer object"
;
}
...
...
@@ -44,10 +44,10 @@ bitjs.io.BitStream = function(ab, rtl, opt_offset, opt_length) {
this
.
bytePtr
=
0
;
// tracks which byte we are on
this
.
bitPtr
=
0
;
// tracks which bit we are on (can have values 0 through 7)
this
.
peekBits
=
rtl
?
this
.
peekBits_rtl
:
this
.
peekBits_ltr
;
};
};
/**
/**
* byte0 byte1 byte2 byte3
* 7......0 | 7......0 | 7......0 | 7......0
*
...
...
@@ -57,7 +57,7 @@ bitjs.io.BitStream = function(ab, rtl, opt_offset, opt_length) {
* @param {boolean=} movePointers Whether to move the pointer, defaults false.
* @return {number} The peeked bits, as an unsigned number.
*/
bitjs
.
io
.
BitStream
.
prototype
.
peekBits_ltr
=
function
(
n
,
movePointers
)
{
bitjs
.
io
.
BitStream
.
prototype
.
peekBits_ltr
=
function
(
n
,
movePointers
)
{
if
(
n
<=
0
||
typeof
n
!=
typeof
1
)
{
return
0
;
}
...
...
@@ -89,8 +89,7 @@ bitjs.io.BitStream.prototype.peekBits_ltr = function(n, movePointers) {
bitPtr
=
0
;
bitsIn
+=
numBitsLeftInThisByte
;
n
-=
numBitsLeftInThisByte
;
}
else
{
}
else
{
var
mask
=
(
BITMASK
[
n
]
<<
bitPtr
);
result
|=
(((
bytes
[
bytePtr
]
&
mask
)
>>
bitPtr
)
<<
bitsIn
);
...
...
@@ -106,10 +105,10 @@ bitjs.io.BitStream.prototype.peekBits_ltr = function(n, movePointers) {
}
return
result
;
};
};
/**
/**
* byte0 byte1 byte2 byte3
* 7......0 | 7......0 | 7......0 | 7......0
*
...
...
@@ -119,7 +118,7 @@ bitjs.io.BitStream.prototype.peekBits_ltr = function(n, movePointers) {
* @param {boolean=} movePointers Whether to move the pointer, defaults false.
* @return {number} The peeked bits, as an unsigned number.
*/
bitjs
.
io
.
BitStream
.
prototype
.
peekBits_rtl
=
function
(
n
,
movePointers
)
{
bitjs
.
io
.
BitStream
.
prototype
.
peekBits_rtl
=
function
(
n
,
movePointers
)
{
if
(
n
<=
0
||
typeof
n
!=
typeof
1
)
{
return
0
;
}
...
...
@@ -149,8 +148,7 @@ bitjs.io.BitStream.prototype.peekBits_rtl = function(n, movePointers) {
bytePtr
++
;
bitPtr
=
0
;
n
-=
numBitsLeftInThisByte
;
}
else
{
}
else
{
result
<<=
n
;
result
|=
((
bytes
[
bytePtr
]
&
(
BITMASK
[
n
]
<<
(
8
-
n
-
bitPtr
)))
>>
(
8
-
n
-
bitPtr
));
...
...
@@ -165,33 +163,33 @@ bitjs.io.BitStream.prototype.peekBits_rtl = function(n, movePointers) {
}
return
result
;
};
};
/**
/**
* Peek at 16 bits from current position in the buffer.
* Bit at (bytePtr,bitPtr) has the highest position in returning data.
* Taken from getbits.hpp in unrar.
* TODO: Move this out of BitStream and into unrar.
*/
bitjs
.
io
.
BitStream
.
prototype
.
getBits
=
function
()
{
bitjs
.
io
.
BitStream
.
prototype
.
getBits
=
function
()
{
return
(((((
this
.
bytes
[
this
.
bytePtr
]
&
0xff
)
<<
16
)
+
((
this
.
bytes
[
this
.
bytePtr
+
1
]
&
0xff
)
<<
8
)
+
((
this
.
bytes
[
this
.
bytePtr
+
2
]
&
0xff
)))
>>>
(
8
-
this
.
bitPtr
))
&
0xffff
);
};
((
this
.
bytes
[
this
.
bytePtr
+
1
]
&
0xff
)
<<
8
)
+
((
this
.
bytes
[
this
.
bytePtr
+
2
]
&
0xff
)))
>>>
(
8
-
this
.
bitPtr
))
&
0xffff
);
};
/**
/**
* Reads n bits out of the stream, consuming them (moving the bit pointer).
* @param {number} n The number of bits to read.
* @return {number} The read bits, as an unsigned number.
*/
bitjs
.
io
.
BitStream
.
prototype
.
readBits
=
function
(
n
)
{
bitjs
.
io
.
BitStream
.
prototype
.
readBits
=
function
(
n
)
{
return
this
.
peekBits
(
n
,
true
);
};
};
/**
/**
* This returns n bytes as a sub-array, advancing the pointer if movePointers
* is true. Only use this for uncompressed blocks as this throws away remaining
* bits in the current byte.
...
...
@@ -199,7 +197,7 @@ bitjs.io.BitStream.prototype.readBits = function(n) {
* @param {boolean=} movePointers Whether to move the pointer, defaults false.
* @return {Uint8Array} The subarray.
*/
bitjs
.
io
.
BitStream
.
prototype
.
peekBytes
=
function
(
n
,
movePointers
)
{
bitjs
.
io
.
BitStream
.
prototype
.
peekBytes
=
function
(
n
,
movePointers
)
{
if
(
n
<=
0
||
typeof
n
!=
typeof
1
)
{
return
0
;
}
...
...
@@ -221,15 +219,15 @@ bitjs.io.BitStream.prototype.peekBytes = function(n, movePointers) {
}
return
result
;
};
};
/**
/**
* @param {number} n The number of bytes to read.
* @return {Uint8Array} The subarray.
*/
bitjs
.
io
.
BitStream
.
prototype
.
readBytes
=
function
(
n
)
{
bitjs
.
io
.
BitStream
.
prototype
.
readBytes
=
function
(
n
)
{
return
this
.
peekBytes
(
n
,
true
);
};
};
})();
\ No newline at end of file
cps/static/js/io/bytebuffer.js
View file @
867aa2f0
...
...
@@ -8,53 +8,52 @@
* Copyright(c) 2011 Google Inc.
* Copyright(c) 2011 antimatter15
*/
var
bitjs
=
bitjs
||
{};
bitjs
.
io
=
bitjs
.
io
||
{};
(
function
()
{
/**
/**
* A write-only Byte buffer which uses a Uint8 Typed Array as a backing store.
* @param {number} numBytes The number of bytes to allocate.
* @constructor
*/
bitjs
.
io
.
ByteBuffer
=
function
(
numBytes
)
{
bitjs
.
io
.
ByteBuffer
=
function
(
numBytes
)
{
if
(
typeof
numBytes
!=
typeof
1
||
numBytes
<=
0
)
{
throw
"Error! ByteBuffer initialized with '"
+
numBytes
+
"'"
;
}
this
.
data
=
new
Uint8Array
(
numBytes
);
this
.
ptr
=
0
;
};
};
/**
/**
* @param {number} b The byte to insert.
*/
bitjs
.
io
.
ByteBuffer
.
prototype
.
insertByte
=
function
(
b
)
{
bitjs
.
io
.
ByteBuffer
.
prototype
.
insertByte
=
function
(
b
)
{
// TODO: throw if byte is invalid?
this
.
data
[
this
.
ptr
++
]
=
b
;
};
};
/**
/**
* @param {Array.<number>|Uint8Array|Int8Array} bytes The bytes to insert.
*/
bitjs
.
io
.
ByteBuffer
.
prototype
.
insertBytes
=
function
(
bytes
)
{
bitjs
.
io
.
ByteBuffer
.
prototype
.
insertBytes
=
function
(
bytes
)
{
// TODO: throw if bytes is invalid?
this
.
data
.
set
(
bytes
,
this
.
ptr
);
this
.
ptr
+=
bytes
.
length
;
};
};
/**
/**
* Writes an unsigned number into the next n bytes. If the number is too large
* to fit into n bytes or is negative, an error is thrown.
* @param {number} num The unsigned number to write.
* @param {number} numBytes The number of bytes to write the number into.
*/
bitjs
.
io
.
ByteBuffer
.
prototype
.
writeNumber
=
function
(
num
,
numBytes
)
{
bitjs
.
io
.
ByteBuffer
.
prototype
.
writeNumber
=
function
(
num
,
numBytes
)
{
if
(
numBytes
<
1
)
{
throw
'Trying to write into too few bytes: '
+
numBytes
;
}
...
...
@@ -75,16 +74,16 @@ bitjs.io.ByteBuffer.prototype.writeNumber = function(num, numBytes) {
}
this
.
insertBytes
(
bytes
);
};
};
/**
/**
* Writes a signed number into the next n bytes. If the number is too large
* to fit into n bytes, an error is thrown.
* @param {number} num The signed number to write.
* @param {number} numBytes The number of bytes to write the number into.
*/
bitjs
.
io
.
ByteBuffer
.
prototype
.
writeSignedNumber
=
function
(
num
,
numBytes
)
{
bitjs
.
io
.
ByteBuffer
.
prototype
.
writeSignedNumber
=
function
(
num
,
numBytes
)
{
if
(
numBytes
<
1
)
{
throw
'Trying to write into too few bytes: '
+
numBytes
;
}
...
...
@@ -103,13 +102,13 @@ bitjs.io.ByteBuffer.prototype.writeSignedNumber = function(num, numBytes) {
}
this
.
insertBytes
(
bytes
);
};
};
/**
/**
* @param {string} str The ASCII string to write.
*/
bitjs
.
io
.
ByteBuffer
.
prototype
.
writeASCIIString
=
function
(
str
)
{
bitjs
.
io
.
ByteBuffer
.
prototype
.
writeASCIIString
=
function
(
str
)
{
for
(
var
i
=
0
;
i
<
str
.
length
;
++
i
)
{
var
curByte
=
str
.
charCodeAt
(
i
);
if
(
curByte
<
0
||
curByte
>
255
)
{
...
...
@@ -117,6 +116,6 @@ bitjs.io.ByteBuffer.prototype.writeASCIIString = function(str) {
}
this
.
insertByte
(
curByte
);
}
};
};
})();
\ No newline at end of file
cps/static/js/io/bytestream.js
View file @
867aa2f0
...
...
@@ -8,14 +8,13 @@
* Copyright(c) 2011 Google Inc.
* Copyright(c) 2011 antimatter15
*/
var
bitjs
=
bitjs
||
{};
bitjs
.
io
=
bitjs
.
io
||
{};
(
function
()
{
/**
/**
* This object allows you to peek and consume bytes as numbers and strings
* out of an ArrayBuffer. In this buffer, everything must be byte-aligned.
*
...
...
@@ -24,22 +23,22 @@ bitjs.io = bitjs.io || {};
* @param {number=} opt_length The length of this BitStream
* @constructor
*/
bitjs
.
io
.
ByteStream
=
function
(
ab
,
opt_offset
,
opt_length
)
{
bitjs
.
io
.
ByteStream
=
function
(
ab
,
opt_offset
,
opt_length
)
{
var
offset
=
opt_offset
||
0
;
var
length
=
opt_length
||
ab
.
byteLength
;
this
.
bytes
=
new
Uint8Array
(
ab
,
offset
,
length
);
this
.
ptr
=
0
;
};
};
/**
/**
* Peeks at the next n bytes as an unsigned number but does not advance the
* pointer
* TODO: This apparently cannot read more than 4 bytes as a number?
* @param {number} n The number of bytes to peek at.
* @return {number} The n bytes interpreted as an unsigned number.
*/
bitjs
.
io
.
ByteStream
.
prototype
.
peekNumber
=
function
(
n
)
{
bitjs
.
io
.
ByteStream
.
prototype
.
peekNumber
=
function
(
n
)
{
// TODO: return error if n would go past the end of the stream?
if
(
n
<=
0
||
typeof
n
!=
typeof
1
)
return
-
1
;
...
...
@@ -53,29 +52,29 @@ bitjs.io.ByteStream.prototype.peekNumber = function(n) {
--
curByte
;
}
return
result
;
};
};
/**
/**
* Returns the next n bytes as an unsigned number (or -1 on error)
* and advances the stream pointer n bytes.
* @param {number} n The number of bytes to read.
* @return {number} The n bytes interpreted as an unsigned number.
*/
bitjs
.
io
.
ByteStream
.
prototype
.
readNumber
=
function
(
n
)
{
var
num
=
this
.
peekNumber
(
n
);
bitjs
.
io
.
ByteStream
.
prototype
.
readNumber
=
function
(
n
)
{
var
num
=
this
.
peekNumber
(
n
);
this
.
ptr
+=
n
;
return
num
;
};
};
/**
/**
* Returns the next n bytes as a signed number but does not advance the
* pointer.
* @param {number} n The number of bytes to read.
* @return {number} The bytes interpreted as a signed number.
*/
bitjs
.
io
.
ByteStream
.
prototype
.
peekSignedNumber
=
function
(
n
)
{
bitjs
.
io
.
ByteStream
.
prototype
.
peekSignedNumber
=
function
(
n
)
{
var
num
=
this
.
peekNumber
(
n
);
var
HALF
=
Math
.
pow
(
2
,
(
n
*
8
)
-
1
);
var
FULL
=
HALF
*
2
;
...
...
@@ -83,29 +82,29 @@ bitjs.io.ByteStream.prototype.peekSignedNumber = function(n) {
if
(
num
>=
HALF
)
num
-=
FULL
;
return
num
;
};
};
/**
/**
* Returns the next n bytes as a signed number and advances the stream pointer.
* @param {number} n The number of bytes to read.
* @return {number} The bytes interpreted as a signed number.
*/
bitjs
.
io
.
ByteStream
.
prototype
.
readSignedNumber
=
function
(
n
)
{
bitjs
.
io
.
ByteStream
.
prototype
.
readSignedNumber
=
function
(
n
)
{
var
num
=
this
.
peekSignedNumber
(
n
);
this
.
ptr
+=
n
;
return
num
;
};
};
/**
/**
* This returns n bytes as a sub-array, advancing the pointer if movePointers
* is true.
* @param {number} n The number of bytes to read.
* @param {boolean} movePointers Whether to move the pointers.
* @return {Uint8Array} The subarray.
*/
bitjs
.
io
.
ByteStream
.
prototype
.
peekBytes
=
function
(
n
,
movePointers
)
{
bitjs
.
io
.
ByteStream
.
prototype
.
peekBytes
=
function
(
n
,
movePointers
)
{
if
(
n
<=
0
||
typeof
n
!=
typeof
1
)
{
return
null
;
}
...
...
@@ -117,25 +116,25 @@ bitjs.io.ByteStream.prototype.peekBytes = function(n, movePointers) {
}
return
result
;
};
};
/**
/**
* Reads the next n bytes as a sub-array.
* @param {number} n The number of bytes to read.
* @return {Uint8Array} The subarray.
*/
bitjs
.
io
.
ByteStream
.
prototype
.
readBytes
=
function
(
n
)
{
bitjs
.
io
.
ByteStream
.
prototype
.
readBytes
=
function
(
n
)
{
return
this
.
peekBytes
(
n
,
true
);
};
};
/**
/**
* Peeks at the next n bytes as a string but does not advance the pointer.
* @param {number} n The number of bytes to peek at.
* @return {string} The next n bytes as a string.
*/
bitjs
.
io
.
ByteStream
.
prototype
.
peekString
=
function
(
n
)
{
bitjs
.
io
.
ByteStream
.
prototype
.
peekString
=
function
(
n
)
{
if
(
n
<=
0
||
typeof
n
!=
typeof
1
)
{
return
""
;
}
...
...
@@ -145,20 +144,20 @@ bitjs.io.ByteStream.prototype.peekString = function(n) {
result
+=
String
.
fromCharCode
(
this
.
bytes
[
p
]);
}
return
result
;
};
};
/**
/**
* Returns the next n bytes as an ASCII string and advances the stream pointer
* n bytes.
* @param {number} n The number of bytes to read.
* @return {string} The next n bytes as a string.
*/
bitjs
.
io
.
ByteStream
.
prototype
.
readString
=
function
(
n
)
{
bitjs
.
io
.
ByteStream
.
prototype
.
readString
=
function
(
n
)
{
var
strToReturn
=
this
.
peekString
(
n
);
this
.
ptr
+=
n
;
return
strToReturn
;
};
};
})();
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment