Skip to content

Commit 0628354

Browse files
Int: Add bitwise functions from Pervasives
1 parent ddc4a08 commit 0628354

File tree

2 files changed

+87
-0
lines changed

2 files changed

+87
-0
lines changed

src/Core__Int.res

+10
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,16 @@ let fromString = (x, ~radix=?) => {
4545

4646
external mod: (int, int) => int = "%modint"
4747

48+
external land: (int, int) => int = "%andint"
49+
external lor: (int, int) => int = "%orint"
50+
external lxor: (int, int) => int = "%xorint"
51+
52+
external lsl: (int, int) => int = "%lslint"
53+
external lsr: (int, int) => int = "%lsrint"
54+
external asr: (int, int) => int = "%asrint"
55+
56+
let lnot = x => lxor(x, -1)
57+
4858
type rangeOptions = {step?: int, inclusive?: bool}
4959

5060
let abs = x =>

src/Core__Int.resi

+77
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,83 @@ Int.fromString("6", ~radix=2) == None
292292
*/
293293
let fromString: (string, ~radix: int=?) => option<int>
294294

295+
/**
296+
`land(n1, n2)` calculates the bitwise logical AND of two integers.
297+
298+
## Examples
299+
300+
```rescript
301+
Int.land(7, 4) == 4
302+
```
303+
*/
304+
external land: (int, int) => int = "%andint"
305+
306+
/**
307+
`lor(n1, n2)` calculates the bitwise logical OR of two integers.
308+
309+
## Examples
310+
311+
```rescript
312+
Int.lor(7, 4) == 7
313+
```
314+
*/
315+
external lor: (int, int) => int = "%orint"
316+
317+
/**
318+
`lxor(n1, n2)` calculates the bitwise logical XOR of two integers.
319+
320+
## Examples
321+
322+
```rescript
323+
Int.lxor(7, 4) == 3
324+
```
325+
*/
326+
external lxor: (int, int) => int = "%xorint"
327+
328+
/**
329+
`lnot(n)` calculates the bitwise logical NOT of an integer.
330+
331+
## Examples
332+
333+
```rescript
334+
Int.lnot(2) == -3
335+
```
336+
*/
337+
let lnot: (int, int) => int
338+
339+
/**
340+
`lsl(n, length)` calculates the bitwise logical left shift of an integer `n` by `length`.
341+
342+
## Examples
343+
344+
```rescript
345+
Int.lsl(4, 1) == 8
346+
```
347+
*/
348+
external lsl: (int, int) => int = "%lslint"
349+
350+
/**
351+
`lsr(n, length)` calculates the bitwise logical right shift of an integer `n` by `length`.
352+
353+
## Examples
354+
355+
```rescript
356+
Int.lsr(8, 1) == 4
357+
```
358+
*/
359+
external lsr: (int, int) => int = "%lsrint"
360+
361+
/**
362+
`asr(n, length)` calculates the bitwise arithmetic right shift of an integer `n` by `length`.
363+
364+
## Examples
365+
366+
```rescript
367+
Int.asr(4, 1) == 2
368+
```
369+
*/
370+
external asr: (int, int) => int = "%asrint"
371+
295372
/**
296373
`mod(n1, n2)` calculates the modulo (remainder after division) of two integers.
297374

0 commit comments

Comments
 (0)