evseevnn\Cassandra\Protocol\Response\DataStream::readBigInt PHP Method

readBigInt() public method

Read unsigned big int;
public readBigInt ( $isCollectionElement = false ) : int;
return int;
    function readBigInt($isCollectionElement = false)
    {
        if ($isCollectionElement) {
            $length = $this->readShort();
        } else {
            $length = 8;
        }
        $data = $this->read($length);
        $arr = unpack('N2', $data);
        if (PHP_INT_SIZE == 4) {
            $hi = $arr[1];
            $lo = $arr[2];
            $isNeg = $hi < 0;
            // Check for a negative
            if ($isNeg) {
                $hi = ~$hi & (int) 0xffffffff;
                $lo = ~$lo & (int) 0xffffffff;
                if ($lo == (int) 0xffffffff) {
                    $hi++;
                    $lo = 0;
                } else {
                    $lo++;
                }
            }
            // Force 32bit words in excess of 2G to pe positive - we deal wigh sign
            // explicitly below
            if ($hi & (int) 0x80000000) {
                $hi &= (int) 0x7fffffff;
                $hi += 0x80000000;
            }
            if ($lo & (int) 0x80000000) {
                $lo &= (int) 0x7fffffff;
                $lo += 0x80000000;
            }
            $value = $hi * 4294967296 + $lo;
            if ($isNeg) {
                $value = 0 - $value;
            }
        } else {
            if ($arr[2] & 0x80000000) {
                $arr[2] = $arr[2] & 0xffffffff;
            }
            if ($arr[1] & 0x80000000) {
                $arr[1] = $arr[1] & 0xffffffff;
                $arr[1] = $arr[1] ^ 0xffffffff;
                $arr[2] = $arr[2] ^ 0xffffffff;
                $value = 0 - $arr[1] * 4294967296 - $arr[2] - 1;
            } else {
                $value = $arr[1] * 4294967296 + $arr[2];
            }
        }
        return $value;
    }