mozilla

Compare Revisions

Working with data

Change Revisions

Revision 98271:

Revision 98271 by Sheppy on

Revision 98272:

Revision 98272 by Sheppy on

Title:
Working with data
Working with data
Slug:
Mozilla/js-ctypes/Using_js-ctypes/Working_with_data
Mozilla/js-ctypes/Using_js-ctypes/Working_with_data
Tags:
JavaScript, js-ctypes
JavaScript, js-ctypes
Content:

Revision 98271
Revision 98272
t320      more to come...t320      For example, adding two 64-bit integers can be done like th
 >is. This example is for unsigned numbers, but a similar approach 
 >can be taken for signed values.
321    </p>
322    <pre class="brush: js">
323function add(a, b) {
324  const MAX_INT = Math.pow(2, 32);
325 
326  var alo = ctypes.UInt64.lo(a);
327  var ahi = ctypes.UInt64.hi(a);
328  var blo = ctypes.UInt64.lo(b);
329  var bhi = ctypes.UInt64.hi(b);
330 
331  var lo = alo + blo;
332  var hi = 0;
333 
334  if (lo &gt;= MAX_UINT) {
335    hi = lo - MAX_UINT;
336    lo -= MAX_UINT;
337  }
338 
339  hi += (ahi + bhi);
340 
341  return ctypes.UInt64.join(hi, lo);
342};
343</pre>
344    <p>
345      This splits each of the two source numbers into their high 
 >and low components, then adds the low 32 bits of each, handling c
 >arry into the high 32 bits. Once the math is done, the two values
 > are joined back together. <a href="/en/js-ctypes/js-ctypes_refer
 >ence/UInt64#join()" title="en/js-ctypes/js-ctypes reference/UInt6
 >4#join()"><code>join()</code></a>&nbsp;will throw an exception if
 > the resulting number exceeds 64 bits in length.

Back to History