source: trip-planner-front/node_modules/hdr-histogram-js/assembly/ByteBuffer.ts@ e29cc2e

Last change on this file since e29cc2e was 6a3a178, checked in by Ema <ema_spirova@…>, 3 years ago

initial commit

  • Property mode set to 100644
File size: 3.0 KB
Line 
1/*
2 * This is a AssemblyScript port of the original Java version, which was written by
3 * Gil Tene as described in
4 * https://github.com/HdrHistogram/HdrHistogram
5 * and released to the public domain, as explained at
6 * http://creativecommons.org/publicdomain/zero/1.0/
7 */
8
9/**
10 * Mimic Java's ByteBufffer with big endian order
11 */
12class ByteBuffer {
13 position: i32;
14
15 data: Uint8Array;
16
17 int64ArrayForConvert: Uint64Array;
18 int32ArrayForConvert: Uint32Array;
19 int8ArrayForConvertInt32: Uint8Array;
20 int8ArrayForConvertInt64: Uint8Array;
21
22 static allocate(size: i32 = 16): ByteBuffer {
23 return new ByteBuffer(new Uint8Array(size));
24 }
25
26 constructor(data: Uint8Array) {
27 this.position = 0;
28 this.data = data;
29 this.int64ArrayForConvert = new Uint64Array(1);
30 this.int32ArrayForConvert = new Uint32Array(1);
31 this.int8ArrayForConvertInt32 = Uint8Array.wrap(
32 this.int32ArrayForConvert.buffer
33 );
34 this.int8ArrayForConvertInt64 = Uint8Array.wrap(
35 this.int64ArrayForConvert.buffer
36 );
37 }
38
39 put(value: u8): void {
40 if (this.position === this.data.length) {
41 const oldArray = this.data;
42 this.data = new Uint8Array(this.data.length << 1);
43 this.data.set(oldArray);
44 }
45 unchecked((this.data[this.position] = value));
46 this.position++;
47 }
48
49 putInt32(value: u32): void {
50 if (this.data.length - this.position < 4) {
51 const oldArray = this.data;
52 this.data = new Uint8Array((this.data.length << 1) + 4);
53 this.data.set(oldArray);
54 }
55 unchecked((this.int32ArrayForConvert[0] = value));
56 this.data.set(this.int8ArrayForConvertInt32.reverse(), this.position);
57 this.position += 4;
58 }
59
60 putInt64(value: u64): void {
61 if (this.data.length - this.position < 8) {
62 const oldArray = this.data;
63 this.data = new Uint8Array((this.data.length << 1) + 8);
64 this.data.set(oldArray);
65 }
66 unchecked((this.int64ArrayForConvert[0] = value));
67 this.data.set(this.int8ArrayForConvertInt64.reverse(), this.position);
68 this.position += 8;
69 }
70
71 putArray(array: Uint8Array): void {
72 if (this.data.length - this.position < array.byteLength) {
73 const oldArray = this.data;
74 this.data = new Uint8Array(this.position + array.byteLength);
75 this.data.set(oldArray);
76 }
77 this.data.set(array, this.position);
78 this.position += array.byteLength;
79 }
80
81 get(): u8 {
82 const value = unchecked(this.data[this.position]);
83 this.position++;
84 return value;
85 }
86
87 getInt32(): u32 {
88 this.int8ArrayForConvertInt32.set(
89 this.data.slice(this.position, this.position + 4).reverse()
90 );
91 const value = unchecked(this.int32ArrayForConvert[0]);
92 this.position += 4;
93 return value;
94 }
95
96 getInt64(): u64 {
97 this.int8ArrayForConvertInt64.set(
98 this.data.slice(this.position, this.position + 8).reverse()
99 );
100 const value = unchecked(this.int64ArrayForConvert[0]);
101 this.position += 8;
102 return value;
103 }
104
105 resetPosition(): void {
106 this.position = 0;
107 }
108}
109
110export default ByteBuffer;
Note: See TracBrowser for help on using the repository browser.