aboutsummaryrefslogtreecommitdiff
path: root/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/Twiddling.php
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/Twiddling.php')
-rw-r--r--libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/Twiddling.php235
1 files changed, 235 insertions, 0 deletions
diff --git a/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/Twiddling.php b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/Twiddling.php
new file mode 100644
index 0000000..8ad1285
--- /dev/null
+++ b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/Twiddling.php
@@ -0,0 +1,235 @@
+<?php
+/**
+ * PHP Reader Library
+ *
+ * Copyright (c) 2008 The PHP Reader Project Workgroup. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * - Neither the name of the project workgroup nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package php-reader
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Id: Twiddling.php 110 2008-09-05 17:10:51Z svollbehr $
+ */
+
+/**
+ * A utility class to perform bit twiddling on integers.
+ *
+ * @package php-reader
+ * @author Ryan Butterfield <buttza@gmail.com>
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Rev: 110 $
+ * @static
+ */
+final class Twiddling
+{
+ /**
+ * Default private constructor for a static class.
+ */
+ private function __construct() {}
+
+ /**
+ * Sets a bit at a given position in an integer.
+ *
+ * @param integer $integer The value to manipulate.
+ * @param integer $position The position of the bit to set.
+ * @param boolean $on Whether to enable or clear the bit.
+ * @return integer
+ */
+ public static function setBit($integer, $position, $on)
+ {
+ return $on ? self::enableBit($integer, $position) :
+ self::clearBit($integer, $position);
+ }
+
+ /**
+ * Enables a bit at a given position in an integer.
+ *
+ * @param integer $integer The value to manipulate.
+ * @param integer $position The position of the bit to enable.
+ * @return integer
+ */
+ public static function enableBit($integer, $position)
+ {
+ return $integer | (1 << $position);
+ }
+
+ /**
+ * Clears a bit at a given position in an integer.
+ *
+ * @param integer $integer The value to manipulate.
+ * @param integer $position The position of the bit to clear.
+ * @return integer
+ */
+ public static function clearBit($integer, $position)
+ {
+ return $integer & ~(1 << $position);
+ }
+
+ /**
+ * Toggles a bit at a given position in an integer.
+ *
+ * @param integer $integer The value to manipulate.
+ * @param integer $position The position of the bit to toggle.
+ * @return integer
+ */
+ public static function toggleBit($integer, $position)
+ {
+ return $integer ^ (1 << $position);
+ }
+
+ /**
+ * Tests a bit at a given position in an integer.
+ *
+ * @param integer $integer The value to test.
+ * @param integer $position The position of the bit to test.
+ * @return boolean
+ */
+ public static function testBit($integer, $position)
+ {
+ return ($integer & (1 << $position)) != 0;
+ }
+
+ /**
+ * Sets a given set of bits in an integer.
+ *
+ * @param integer $integer The value to manipulate.
+ * @param integer $bits The bits to set.
+ * @param boolean $on Whether to enable or clear the bits.
+ * @return integer
+ */
+ public static function setBits($integer, $bits, $on)
+ {
+ return $on ? self::enableBits($integer, $bits) :
+ self::clearBits($integer, $bits);
+ }
+
+ /**
+ * Enables a given set of bits in an integer.
+ *
+ * @param integer $integer The value to manipulate.
+ * @param integer $bits The bits to enable.
+ * @return integer
+ */
+ public static function enableBits($integer, $bits)
+ {
+ return $integer | $bits;
+ }
+
+ /**
+ * Clears a given set of bits in an integer.
+ *
+ * @param integer $integer The value to manipulate.
+ * @param integer $bits The bits to clear.
+ * @return integer
+ */
+ public static function clearBits($integer, $bits)
+ {
+ return $integer & ~$bits;
+ }
+
+ /**
+ * Toggles a given set of bits in an integer.
+ *
+ * @param integer $integer The value to manipulate.
+ * @param integer $bits The bits to toggle.
+ * @return integer
+ */
+ public static function toggleBits($integer, $bits)
+ {
+ return $integer ^ $bits;
+ }
+
+ /**
+ * Tests a given set of bits in an integer
+ * returning whether all bits are set.
+ *
+ * @param integer $integer The value to test.
+ * @param integer $bits The bits to test.
+ * @return boolean
+ */
+ public static function testAllBits($integer, $bits)
+ {
+ return ($integer & $bits) == $bits;
+ }
+
+ /**
+ * Tests a given set of bits in an integer
+ * returning whether any bits are set.
+ *
+ * @param integer $integer The value to test.
+ * @param integer $bits The bits to test.
+ * @return boolean
+ */
+ public static function testAnyBits($integer, $bits)
+ {
+ return ($integer & $bits) != 0;
+ }
+
+ /**
+ * Stores a value in a given range in an integer.
+ *
+ * @param integer $integer The value to store into.
+ * @param integer $start The position to store from. Must be <= $end.
+ * @param integer $end The position to store to. Must be >= $start.
+ * @param integer $value The value to store.
+ * @return integer
+ */
+ public static function setValue($integer, $start, $end, $value)
+ {
+ return self::clearBits($integer, self::getMask($start, $end) << $start) |
+ ($value << $start);
+ }
+
+ /**
+ * Retrieves a value from a given range in an integer, inclusive.
+ *
+ * @param integer $integer The value to read from.
+ * @param integer $start The position to read from. Must be <= $end.
+ * @param integer $end The position to read to. Must be >= $start.
+ * @return integer
+ */
+ public static function getValue($integer, $start, $end)
+ {
+ return ($integer & self::getMask($start, $end)) >> $start;
+ }
+
+ /**
+ * Returns an integer with all bits set from start to end.
+ *
+ * @param integer $start The position to start setting bits from. Must
+ * be <= $end.
+ * @param integer $end The position to stop setting bits. Must be >= $start.
+ * @return integer
+ */
+ public static function getMask($start, $end)
+ {
+ $mask = 0;
+ for (; $start <= $end; $start++)
+ $mask |= 1 << $start;
+ return $mask;
+ }
+}