Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F95322818
hash-sum.js
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Sat, Dec 14, 17:28
Size
1 KB
Mime Type
text/x-Algol68
Expires
Mon, Dec 16, 17:28 (1 d, 23 h)
Engine
blob
Format
Raw Data
Handle
22943863
Attached To
rOACCT Open Access Compliance Check Tool (OACCT)
hash-sum.js
View Options
'use strict'
;
function
pad
(
hash
,
len
)
{
while
(
hash
.
length
<
len
)
{
hash
=
'0'
+
hash
;
}
return
hash
;
}
function
fold
(
hash
,
text
)
{
var
i
;
var
chr
;
var
len
;
if
(
text
.
length
===
0
)
{
return
hash
;
}
for
(
i
=
0
,
len
=
text
.
length
;
i
<
len
;
i
++
)
{
chr
=
text
.
charCodeAt
(
i
);
hash
=
((
hash
<<
5
)
-
hash
)
+
chr
;
hash
|=
0
;
}
return
hash
<
0
?
hash
*
-
2
:
hash
;
}
function
foldObject
(
hash
,
o
,
seen
)
{
return
Object
.
keys
(
o
).
sort
().
reduce
(
foldKey
,
hash
);
function
foldKey
(
hash
,
key
)
{
return
foldValue
(
hash
,
o
[
key
],
key
,
seen
);
}
}
function
foldValue
(
input
,
value
,
key
,
seen
)
{
var
hash
=
fold
(
fold
(
fold
(
input
,
key
),
toString
(
value
)),
typeof
value
);
if
(
value
===
null
)
{
return
fold
(
hash
,
'null'
);
}
if
(
value
===
undefined
)
{
return
fold
(
hash
,
'undefined'
);
}
if
(
typeof
value
===
'object'
||
typeof
value
===
'function'
)
{
if
(
seen
.
indexOf
(
value
)
!==
-
1
)
{
return
fold
(
hash
,
'[Circular]'
+
key
);
}
seen
.
push
(
value
);
var
objHash
=
foldObject
(
hash
,
value
,
seen
)
if
(
!
(
'valueOf'
in
value
)
||
typeof
value
.
valueOf
!==
'function'
)
{
return
objHash
;
}
try
{
return
fold
(
objHash
,
String
(
value
.
valueOf
()))
}
catch
(
err
)
{
return
fold
(
objHash
,
'[valueOf exception]'
+
(
err
.
stack
||
err
.
message
))
}
}
return
fold
(
hash
,
value
.
toString
());
}
function
toString
(
o
)
{
return
Object
.
prototype
.
toString
.
call
(
o
);
}
function
sum
(
o
)
{
return
pad
(
foldValue
(
0
,
o
,
''
,
[]).
toString
(
16
),
8
);
}
module
.
exports
=
sum
;
Event Timeline
Log In to Comment