Code has been added to clipboard!
Solidity Libraries Example 2
Example
pragma solidity ^0.4.0;
library IntBig {
struct intbig {
uint[] currentLimbs;
}
function fromUint(uint var1) internal returns (intbig r) {
r.currentLimbs = new uint[](1);
r.currentLimbs[0] = var1;
}
function add(intbig _var1, intbig _var2) internal returns (intbig r) {
r.currentLimbs = new uint[](max(_var1.currentLimbs.length, _var2.currentLimbs.length));
uint carry = 0;
for (uint i = 0; i < r.currentLimbs.length; ++i) {
uint var1 = currentLimb(_var1, i);
uint var2 = currentLimb(_var2, i);
r.currentLimbs[i] = var1 + var2 + carry;
if (var1 + var2 < var1 || (var1 + var2 == uint(-1) && carry > 0))
carry = 1;
else
carry = 0;
}
if (carry > 0) {
// too bad, we have to add var1 currentLimb
uint[] memory newerLimbs = new uint[](r.currentLimbs.length + 1);
for (i = 0; i < r.currentLimbs.length; ++i)
newerLimbs[i] = r.currentLimbs[i];
newerLimbs[i] = carry;
r.currentLimbs = newerLimbs;
}
}
function currentLimb(intbig _var1, uint _limb) internal returns (uint) {
return _limb < _var1.currentLimbs.length ? _var1.currentLimbs[_limb] : 0;
}
function max(uint var1, uint var2) private returns (uint) {
return var1 > var2 ? var1 : var2;
}
}
contract C {
using IntBig for IntBig.intbig;
function f() {
var var1 = IntBig.fromUint(7);
var var2 = IntBig.fromUint(uint(-1));
var var3 = var1.add(var2);
}
}