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);
    }
}