Skip to content

Commit

Permalink
fix(return) change to i32[]
Browse files Browse the repository at this point in the history
  • Loading branch information
jtenner committed Aug 1, 2019
1 parent 9e8356c commit f08e9c9
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 28 deletions.
3 changes: 2 additions & 1 deletion assembly/__tests__/example.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@ describe("rabin degree", (): void => {
it("fingerprint", (): void => {
let r = new Rabin(14, 1 * 8, 2 * 8, 64)
let file = getFile()
r.fingerprint(file, new Int32Array(file.length/8))
let result = r.fingerprint(file)
// todo: inspect result
});

});
13 changes: 5 additions & 8 deletions assembly/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -175,10 +175,11 @@ export class Rabin {
rabin_init(this)
}

fingerprint(buf: Uint8Array, lengths: Int32Array): void {
fingerprint(buf: Uint8Array): i32[] {
let len = buf.length;
let chunk_idx = 0;
let ptr = changetype<usize>(buf.buffer)
let result = new Array<i32>(0);

while (1) {
var remaining = rabin_next_chunk(this, ptr, len);
if (remaining < 0) {
Expand All @@ -187,16 +188,12 @@ export class Rabin {

len -= remaining;
ptr += remaining;
let c = chunk_idx++
unchecked(lengths[c] = <i32>this.chunk_length)
result.push(<i32>this.chunk_length);
}
return result;
}
}

export function getUint8ArrayTypeId(): i32 {
return idof<Uint8Array>();
}

export function getInt32ArrayTypeId(): i32 {
return idof<Int32Array>();
}
23 changes: 4 additions & 19 deletions src/rabin.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,34 +28,19 @@ class Rabin {
* @memberof Rabin
*/
fingerprint(buf) {
const lengths = new Int32Array(Math.ceil(buf.length/this.min))
const u8arraytype = this.asModule.getUint8ArrayTypeId()
const i32arraytype = this.asModule.getInt32ArrayTypeId()
const lengthsPtr = this.asModule.__retain(this.asModule.__allocArray(i32arraytype, lengths))
const pointer = this.asModule.__retain(this.asModule.__allocArray(u8arraytype, buf))

// run finderprint
this.rabin.fingerprint(pointer, lengthsPtr)
const processedPointer = this.rabin.fingerprint(pointer)

const processed = this.asModule.__getArray(lengthsPtr)

//free memory
this.asModule.freeArray(lengthsPtr)
this.asModule.freeArray(pointer)

// TODO: remove this. @see https://github.com/ipfs/js-ipfs/issues/2118#issuecomment-497722625
// clean extra 0s in the array
const cleanArr = []
for (let i = 0; i < processed.length; i++) {
if (processed[i] === 0) break
cleanArr[i] = processed[i];
}
const processed = this.asModule.__getArray(processedPointer)

// release memory
this.asModule.__release(lengthsPtr)
this.asModule.__release(pointer)
this.asModule.__release(processedPointer)

return cleanArr
return processed
}
}

Expand Down

0 comments on commit f08e9c9

Please sign in to comment.