Continued:
authorRoland Häder <roland@mxchange.org>
Sat, 7 Nov 2020 16:25:59 +0000 (17:25 +0100)
committerRoland Häder <roland@mxchange.org>
Sat, 7 Nov 2020 16:25:59 +0000 (17:25 +0100)
- moved some instances from monolithic BaseFrameworkSystem to proper classes
- set more type-hints for primitive variables

Signed-off-by: Roland Häder <roland@mxchange.org>
framework/main/classes/class_BaseFrameworkSystem.php
framework/main/classes/file_directories/binary/class_BaseBinaryFile.php
framework/main/classes/iterator/file/class_FileIterator.php
framework/main/classes/stacker/class_BaseStacker.php
framework/main/classes/stacker/file/class_BaseFileStack.php
framework/main/classes/utils/string/class_StringUtils.php
framework/main/interfaces/block/class_Block.php
framework/main/interfaces/iterator/file/class_SeekableWritableFileIterator.php
framework/main/interfaces/stacker/class_Stackable.php
framework/main/middleware/class_BaseMiddleware.php
framework/main/middleware/debug/class_DebugMiddleware.php

index 2fe41474f065ae006d9778ecc384a24550ad6fca..a9385580a18f2e20fecb6b6c3835471f112ec37d 100644 (file)
@@ -13,16 +13,13 @@ use Org\Mxchange\CoreFramework\Database\Frontend\DatabaseWrapper;
 use Org\Mxchange\CoreFramework\EntryPoint\ApplicationEntryPoint;
 use Org\Mxchange\CoreFramework\Factory\Database\Wrapper\DatabaseWrapperFactory;
 use Org\Mxchange\CoreFramework\Factory\ObjectFactory;
-use Org\Mxchange\CoreFramework\Filesystem\Block;
 use Org\Mxchange\CoreFramework\Filesystem\FilePointer;
-use Org\Mxchange\CoreFramework\Filesystem\FrameworkDirectory;
 use Org\Mxchange\CoreFramework\Filesystem\PathWriteProtectedException;
 use Org\Mxchange\CoreFramework\Generic\FrameworkInterface;
 use Org\Mxchange\CoreFramework\Generic\NullPointerException;
 use Org\Mxchange\CoreFramework\Generic\UnsupportedOperationException;
 use Org\Mxchange\CoreFramework\Handler\Handleable;
 use Org\Mxchange\CoreFramework\Helper\Helper;
-use Org\Mxchange\CoreFramework\Index\Indexable;
 use Org\Mxchange\CoreFramework\Lists\Listable;
 use Org\Mxchange\CoreFramework\Loader\ClassLoader;
 use Org\Mxchange\CoreFramework\Localization\ManageableLanguage;
@@ -189,26 +186,6 @@ abstract class BaseFrameworkSystem extends stdClass implements FrameworkInterfac
         */
        private $pointerInstance = NULL;
 
-       /**
-        * An instance of an Indexable class
-        */
-       private $indexInstance = NULL;
-
-       /**
-        * An instance of a Block class
-        */
-       private $blockInstance = NULL;
-
-       /**
-        * A FrameworkDirectory instance
-        */
-       private $directoryInstance = NULL;
-
-       /**
-        * The concrete output instance
-        */
-       private $outputInstance = NULL;
-
        /**
         * State instance
         */
@@ -293,50 +270,6 @@ abstract class BaseFrameworkSystem extends stdClass implements FrameworkInterfac
        const EXCEPTION_INVALID_SOCKET               = 0x03e;
        const EXCEPTION_SELF_INSTANCE                = 0x03f;
 
-       /**
-        * Hexadecimal->Decimal translation array
-        */
-       private static $hexdec = array(
-               '0' => 0,
-               '1' => 1,
-               '2' => 2,
-               '3' => 3,
-               '4' => 4,
-               '5' => 5,
-               '6' => 6,
-               '7' => 7,
-               '8' => 8,
-               '9' => 9,
-               'a' => 10,
-               'b' => 11,
-               'c' => 12,
-               'd' => 13,
-               'e' => 14,
-               'f' => 15
-       );
-
-       /**
-        * Decimal->hexadecimal translation array
-        */
-       private static $dechex = array(
-                0 => '0',
-                1 => '1',
-                2 => '2',
-                3 => '3',
-                4 => '4',
-                5 => '5',
-                6 => '6',
-                7 => '7',
-                8 => '8',
-                9 => '9',
-               10 => 'a',
-               11 => 'b',
-               12 => 'c',
-               13 => 'd',
-               14 => 'e',
-               15 => 'f'
-       );
-
        /**
         * Startup time in miliseconds
         */
@@ -1045,63 +978,6 @@ abstract class BaseFrameworkSystem extends stdClass implements FrameworkInterfac
                $this->pointerInstance = NULL;
        }
 
-       /**
-        * Setter for Indexable instance
-        *
-        * @param       $indexInstance  An instance of an Indexable class
-        * @return      void
-        */
-       protected final function setIndexInstance (Indexable $indexInstance) {
-               $this->indexInstance = $indexInstance;
-       }
-
-       /**
-        * Getter for Indexable instance
-        *
-        * @return      $indexInstance  An instance of an Indexable class
-        */
-       public final function getIndexInstance () {
-               return $this->indexInstance;
-       }
-
-       /**
-        * Setter for Block instance
-        *
-        * @param       $blockInstance  An instance of an Block class
-        * @return      void
-        */
-       protected final function setBlockInstance (Block $blockInstance) {
-               $this->blockInstance = $blockInstance;
-       }
-
-       /**
-        * Getter for Block instance
-        *
-        * @return      $blockInstance  An instance of an Block class
-        */
-       public final function getBlockInstance () {
-               return $this->blockInstance;
-       }
-
-       /**
-        * Setter for FrameworkDirectory instance
-        *
-        * @param       $directoryInstance      A FrameworkDirectory instance
-        * @return      void
-        */
-       protected final function setDirectoryInstance (FrameworkDirectory $directoryInstance) {
-               $this->directoryInstance = $directoryInstance;
-       }
-
-       /**
-        * Getter for FrameworkDirectory instance
-        *
-        * @return      $directoryInstance      A FrameworkDirectory instance
-        */
-       protected final function getDirectoryInstance () {
-               return $this->directoryInstance;
-       }
-
        /**
         * Setter for state instance
         *
@@ -1121,25 +997,6 @@ abstract class BaseFrameworkSystem extends stdClass implements FrameworkInterfac
                return $this->stateInstance;
        }
 
-       /**
-        * Setter for output instance
-        *
-        * @param       $outputInstance The debug output instance
-        * @return      void
-        */
-       public final function setOutputInstance (OutputStreamer $outputInstance) {
-               $this->outputInstance = $outputInstance;
-       }
-
-       /**
-        * Getter for output instance
-        *
-        * @return      $outputInstance The debug output instance
-        */
-       public final function getOutputInstance () {
-               return $this->outputInstance;
-       }
-
        /**
         * Setter for call-back instance
         *
@@ -1784,143 +1641,6 @@ Loaded includes:
                // Return result
                return $hasSlept;
        }
-       /**
-        * Converts a hexadecimal string, even with negative sign as first string to
-        * a decimal number using BC functions.
-        *
-        * This work is based on comment #86673 on php.net documentation page at:
-        * <http://de.php.net/manual/en/function.dechex.php#86673>
-        *
-        * @param       $hex    Hexadecimal string
-        * @return      $dec    Decimal number
-        */
-       protected function hex2dec ($hex) {
-               // Convert to all lower-case
-               $hex = strtolower($hex);
-
-               // Detect sign (negative/positive numbers)
-               $sign = '';
-               if (substr($hex, 0, 1) == '-') {
-                       $sign = '-';
-                       $hex = substr($hex, 1);
-               } // END - if
-
-               // Decode the hexadecimal string into a decimal number
-               $dec = 0;
-               for ($i = strlen($hex) - 1, $e = 1; $i >= 0; $i--, $e = bcmul($e, 16)) {
-                       $factor = self::$hexdec[substr($hex, $i, 1)];
-                       $dec = bcadd($dec, bcmul($factor, $e));
-               } // END - for
-
-               // Return the decimal number
-               return $sign . $dec;
-       }
-
-       /**
-        * Converts even very large decimal numbers, also signed, to a hexadecimal
-        * string.
-        *
-        * This work is based on comment #97756 on php.net documentation page at:
-        * <http://de.php.net/manual/en/function.hexdec.php#97756>
-        *
-        * @param       $dec            Decimal number, even with negative sign
-        * @param       $maxLength      Optional maximum length of the string
-        * @return      $hex    Hexadecimal string
-        */
-       protected function dec2hex ($dec, $maxLength = 0) {
-               // maxLength can be zero or devideable by 2
-               assert(($maxLength == 0) || (($maxLength % 2) == 0));
-
-               // Detect sign (negative/positive numbers)
-               $sign = '';
-               if ($dec < 0) {
-                       $sign = '-';
-                       $dec = abs($dec);
-               } // END - if
-
-               // Encode the decimal number into a hexadecimal string
-               $hex = '';
-               do {
-                       $hex = self::$dechex[($dec % (2 ^ 4))] . $hex;
-                       $dec /= (2 ^ 4);
-               } while ($dec >= 1);
-
-               /*
-                * Leading zeros are required for hex-decimal "numbers". In some
-                * situations more leading zeros are wanted, so check for both
-                * conditions.
-                */
-               if ($maxLength > 0) {
-                       // Prepend more zeros
-                       $hex = str_pad($hex, $maxLength, '0', STR_PAD_LEFT);
-               } elseif ((strlen($hex) % 2) != 0) {
-                       // Only make string's length dividable by 2
-                       $hex = '0' . $hex;
-               }
-
-               // Return the hexadecimal string
-               return $sign . $hex;
-       }
-
-       /**
-        * Converts a ASCII string (0 to 255) into a decimal number.
-        *
-        * @param       $asc    The ASCII string to be converted
-        * @return      $dec    Decimal number
-        */
-       protected function asc2dec ($asc) {
-               // Convert it into a hexadecimal number
-               $hex = bin2hex($asc);
-
-               // And back into a decimal number
-               $dec = $this->hex2dec($hex);
-
-               // Return it
-               return $dec;
-       }
-
-       /**
-        * Converts a decimal number into an ASCII string.
-        *
-        * @param       $dec            Decimal number
-        * @return      $asc    An ASCII string
-        */
-       protected function dec2asc ($dec) {
-               // First convert the number into a hexadecimal string
-               $hex = $this->dec2hex($dec);
-
-               // Then convert it into the ASCII string
-               $asc = $this->hex2asc($hex);
-
-               // Return it
-               return $asc;
-       }
-
-       /**
-        * Converts a hexadecimal number into an ASCII string. Negative numbers
-        * are not allowed.
-        *
-        * @param       $hex    Hexadecimal string
-        * @return      $asc    An ASCII string
-        */
-       protected function hex2asc ($hex) {
-               // Check for length, it must be devideable by 2
-               //* DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('hex='.$hex);
-               assert((strlen($hex) % 2) == 0);
-
-               // Walk the string
-               $asc = '';
-               for ($idx = 0; $idx < strlen($hex); $idx+=2) {
-                       // Get the decimal number of the chunk
-                       $part = hexdec(substr($hex, $idx, 2));
-
-                       // Add it to the final string
-                       $asc .= chr($part);
-               } // END - for
-
-               // Return the final string
-               return $asc;
-       }
 
        /**
         * Checks whether the given encoded data was encoded with Base64
index 6a128b755d6fc9936760f4bc1892c3eb86279d39..c2ac5ddf0fd8bc6cdd34d4fb9682de5b00df1c70 100644 (file)
@@ -132,6 +132,11 @@ abstract class BaseBinaryFile extends BaseAbstractFile {
         */
        private $currentBlock = '';
 
+       /**
+        * An instance of a Block class
+        */
+       private $blockInstance = NULL;
+
        /**
         * Protected constructor
         *
@@ -146,6 +151,25 @@ abstract class BaseBinaryFile extends BaseAbstractFile {
                $this->initCountersGapsArray();
        }
 
+       /**
+        * Setter for Block instance
+        *
+        * @param       $blockInstance  An instance of an Block class
+        * @return      void
+        */
+       protected final function setBlockInstance (Block $blockInstance) {
+               $this->blockInstance = $blockInstance;
+       }
+
+       /**
+        * Getter for Block instance
+        *
+        * @return      $blockInstance  An instance of an Block class
+        */
+       public final function getBlockInstance () {
+               return $this->blockInstance;
+       }
+
        /**
         * Checks whether the abstracted file only contains gaps by counting all
         * gaps' bytes together and compare it to total length.
index 3d4a3c57335205396d010e9ce0c8c52beaa83c08..ad9338a2daaf15f983b5173120b6e575f1146b2d 100644 (file)
@@ -30,6 +30,11 @@ use Org\Mxchange\CoreFramework\Iterator\Filesystem\SeekableWritableFileIterator;
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 class FileIterator extends BaseIterator implements SeekableWritableFileIterator {
+       /**
+        * An instance of a Block class
+        */
+       private $blockInstance = NULL;
+
        /**
         * Protected constructor
         *
@@ -58,6 +63,25 @@ class FileIterator extends BaseIterator implements SeekableWritableFileIterator
                return $iteratorInstance;
        }
 
+       /**
+        * Setter for Block instance
+        *
+        * @param       $blockInstance  An instance of an Block class
+        * @return      void
+        */
+       protected final function setBlockInstance (Block $blockInstance) {
+               $this->blockInstance = $blockInstance;
+       }
+
+       /**
+        * Getter for Block instance
+        *
+        * @return      $blockInstance  An instance of an Block class
+        */
+       public final function getBlockInstance () {
+               return $this->blockInstance;
+       }
+
        /**
         * Gets currently read data
         *
index b352c2c55ae7c9e790e54959b688904eb59ae35f..12059306844f95399b1934ef806c7ea79db396ff 100644 (file)
@@ -54,7 +54,7 @@ abstract class BaseStacker extends BaseFrameworkSystem {
         * @return      void
         * @throws      AlreadyInitializedStackerException      If the stack is already initialized
         */
-       public function initStack ($stackerName, $forceReInit = false) {
+       public function initStack (string $stackerName, bool $forceReInit = false) {
                // Is the stack already initialized?
                if (($forceReInit === false) && ($this->isStackInitialized($stackerName))) {
                        // Then throw the exception
@@ -70,7 +70,7 @@ abstract class BaseStacker extends BaseFrameworkSystem {
         *
         * @return      void
         */
-       public function initStacks (array $stacks, $forceReInit = false) {
+       public function initStacks (array $stacks, bool $forceReInit = false) {
                // "Walk" through all (more will be added as needed
                foreach ($stacks as $stackerName) {
                        // Init this stack
@@ -84,7 +84,7 @@ abstract class BaseStacker extends BaseFrameworkSystem {
         * @param       $stackerName    Name of the stack
         * @return      $isInitialized  Whether the stack is initialized
         */
-       public function isStackInitialized ($stackerName) {
+       public function isStackInitialized (string $stackerName) {
                // Is is there?
                $isInitialized = ($this->isValidGenericArrayKey('stacks', $stackerName, 'entries'));
 
@@ -99,7 +99,7 @@ abstract class BaseStacker extends BaseFrameworkSystem {
         * @return      $isFull                 Whether the stack is full
         * @throws      NoStackerException      If given stack is missing
         */
-       protected function isStackFull ($stackerName) {
+       protected function isStackFull (string $stackerName) {
                // Is the stack not yet initialized?
                if (!$this->isStackInitialized($stackerName)) {
                        // Throw an exception
@@ -120,7 +120,7 @@ abstract class BaseStacker extends BaseFrameworkSystem {
         * @return      $isEmpty                        Whether the stack is empty
         * @throws      NoStackerException      If given stack is missing
         */
-       public function isStackEmpty ($stackerName) {
+       public function isStackEmpty (string $stackerName) {
                // Is the stack not yet initialized?
                if (!$this->isStackInitialized($stackerName)) {
                        // Throw an exception
@@ -141,7 +141,7 @@ abstract class BaseStacker extends BaseFrameworkSystem {
         * @return      $count                  Size of stack (array count)
         * @throws      NoStackerException      If given stack is missing
         */
-       public function getStackCount ($stackerName) {
+       public function getStackCount (string $stackerName) {
                // Is the stack not yet initialized?
                if (!$this->isStackInitialized($stackerName)) {
                        // Throw an exception
@@ -163,7 +163,7 @@ abstract class BaseStacker extends BaseFrameworkSystem {
         * @return      void
         * @throws      FullStackerException    Thrown if the stack is full
         */
-       protected function addValue ($stackerName, $value) {
+       protected function addValue (string $stackerName, $value) {
                // Is the stack not yet initialized or full?
                if (!$this->isStackInitialized($stackerName)) {
                        // Then do it here
@@ -185,7 +185,7 @@ abstract class BaseStacker extends BaseFrameworkSystem {
         * @throws      NoStackerException      If the named stacker was not found
         * @throws      EmptyStackerException   If the named stacker is empty
         */
-       protected function getLastValue ($stackerName) {
+       protected function getLastValue (string $stackerName) {
                // Is the stack not yet initialized or full?
                if (!$this->isStackInitialized($stackerName)) {
                        // Throw an exception
@@ -210,7 +210,7 @@ abstract class BaseStacker extends BaseFrameworkSystem {
         * @throws      NoStackerException      If the named stacker was not found
         * @throws      EmptyStackerException   If the named stacker is empty
         */
-       protected function getFirstValue ($stackerName) {
+       protected function getFirstValue (string $stackerName) {
                // Is the stack not yet initialized or full?
                if (!$this->isStackInitialized($stackerName)) {
                        // Throw an exception
@@ -235,7 +235,7 @@ abstract class BaseStacker extends BaseFrameworkSystem {
         * @throws      NoStackerException      If the named stacker was not found
         * @throws      EmptyStackerException   If the named stacker is empty
         */
-       protected function popLast ($stackerName) {
+       protected function popLast (string $stackerName) {
                // Is the stack not yet initialized or full?
                if (!$this->isStackInitialized($stackerName)) {
                        // Throw an exception
@@ -257,7 +257,7 @@ abstract class BaseStacker extends BaseFrameworkSystem {
         * @throws      NoStackerException      If the named stacker was not found
         * @throws      EmptyStackerException   If the named stacker is empty
         */
-       protected function popFirst ($stackerName) {
+       protected function popFirst (string $stackerName) {
                // Is the stack not yet initialized or full?
                if (!$this->isStackInitialized($stackerName)) {
                        // Throw an exception
index c84f3fb9cc8836f4fe3ce310b5cd16817ec1f15f..5ddc1ca0d77371d4ea997cd5da8f21702faa3820 100644 (file)
@@ -7,6 +7,7 @@ use Org\Mxchange\CoreFramework\Factory\Filesystem\Stack\FileStackIndexFactory;
 use Org\Mxchange\CoreFramework\Factory\ObjectFactory;
 use Org\Mxchange\CoreFramework\Filesystem\File\BaseBinaryFile;
 use Org\Mxchange\CoreFramework\Generic\UnsupportedOperationException;
+use Org\Mxchange\CoreFramework\Index\Indexable;
 use Org\Mxchange\CoreFramework\Iterator\Filesystem\SeekableWritableFileIterator;
 use Org\Mxchange\CoreFramework\Stacker\BaseStacker;
 
@@ -56,6 +57,11 @@ abstract class BaseFileStack extends BaseStacker {
         */
        const ARRAY_INDEX_DATA_LENGTH = 'length';
 
+       /**
+        * An instance of an Indexable class
+        */
+       private $indexInstance = NULL;
+
        /**
         * Protected constructor
         *
@@ -67,6 +73,25 @@ abstract class BaseFileStack extends BaseStacker {
                parent::__construct($className);
        }
 
+       /**
+        * Setter for Indexable instance
+        *
+        * @param       $indexInstance  An instance of an Indexable class
+        * @return      void
+        */
+       protected final function setIndexInstance (Indexable $indexInstance) {
+               $this->indexInstance = $indexInstance;
+       }
+
+       /**
+        * Getter for Indexable instance
+        *
+        * @return      $indexInstance  An instance of an Indexable class
+        */
+       public final function getIndexInstance () {
+               return $this->indexInstance;
+       }
+
        /**
         * Reads the file header
         *
@@ -74,23 +99,23 @@ abstract class BaseFileStack extends BaseStacker {
         * @todo        To hard assertions here, better rewrite them to exceptions
         */
        public function readFileHeader () {
-               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('[%s:%d:] CALLED!', __METHOD__, __LINE__));
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('BASE-FILE-STACK: CALLED!', __METHOD__, __LINE__));
 
                // First rewind to beginning as the header sits at the beginning ...
                $this->getIteratorInstance()->rewind();
 
                // Then read it (see constructor for calculation)
                $data = $this->getIteratorInstance()->read($this->getIteratorInstance()->getHeaderSize());
-               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('[%s:%d:] Read %d bytes (%d wanted).', __METHOD__, __LINE__, strlen($data), $this->getIteratorInstance()->getHeaderSize()));
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('BASE-FILE-STACK: Read %d bytes (%d wanted).', strlen($data), $this->getIteratorInstance()->getHeaderSize()));
 
                // Have all requested bytes been read?
                assert(strlen($data) == $this->getIteratorInstance()->getHeaderSize());
-               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('[%s:%d:] Passed assert().', __METHOD__, __LINE__));
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('BASE-FILE-STACK: Passed assert().', __METHOD__, __LINE__));
 
                // Last character must be the separator
-               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('[%s:%d:] data(-1)=%s', __METHOD__, __LINE__, dechex(ord(substr($data, -1, 1)))));
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('BASE-FILE-STACK: data(-1)=%s', dechex(ord(substr($data, -1, 1)))));
                assert(substr($data, -1, 1) == chr(BaseBinaryFile::SEPARATOR_HEADER_ENTRIES));
-               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('[%s:%d:] Passed assert().', __METHOD__, __LINE__));
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('BASE-FILE-STACK: Passed assert().', __METHOD__, __LINE__));
 
                // Okay, then remove it
                $data = substr($data, 0, -1);
@@ -111,25 +136,25 @@ abstract class BaseFileStack extends BaseStacker {
                $this->getIteratorInstance()->setHeader($header);
 
                // Check if the array has only 3 elements
-               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('[%s:%d:] header(%d)=%s', __METHOD__, __LINE__, count($header), print_r($header, true)));
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('BASE-FILE-STACK: header(%d)=%s', count($header), print_r($header, true)));
                assert(count($header) == 3);
-               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('[%s:%d:] Passed assert().', __METHOD__, __LINE__));
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('BASE-FILE-STACK: Passed assert().', __METHOD__, __LINE__));
 
                // Check magic
                assert($header[0] == self::STACK_MAGIC);
-               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('[%s:%d:] Passed assert().', __METHOD__, __LINE__));
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('BASE-FILE-STACK: Passed assert().', __METHOD__, __LINE__));
 
                // Check length of count and seek position
                assert(strlen($header[1]) == BaseBinaryFile::LENGTH_COUNT);
-               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('[%s:%d:] Passed assert().', __METHOD__, __LINE__));
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('BASE-FILE-STACK: Passed assert().', __METHOD__, __LINE__));
                assert(strlen($header[2]) == BaseBinaryFile::LENGTH_POSITION);
-               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('[%s:%d:] Passed assert().', __METHOD__, __LINE__));
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('BASE-FILE-STACK: Passed assert().', __METHOD__, __LINE__));
 
                // Decode count and seek position
                $header[1] = hex2bin($header[1]);
                $header[2] = hex2bin($header[2]);
 
-               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('[%s:%d:] EXIT!', __METHOD__, __LINE__));
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('BASE-FILE-STACK: EXIT!', __METHOD__, __LINE__));
        }
 
        /**
@@ -138,7 +163,7 @@ abstract class BaseFileStack extends BaseStacker {
         * @return      void
         */
        public function flushFileHeader () {
-               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('[%s:%d:] CALLED!', __METHOD__, __LINE__));
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('BASE-FILE-STACK: CALLED!', __METHOD__, __LINE__));
 
                // Put all informations together
                $header = sprintf('%s%s%s%s%s%s',
@@ -164,7 +189,7 @@ abstract class BaseFileStack extends BaseStacker {
                // Write it to disk (header is always at seek position 0)
                $this->getIteratorInstance()->writeData(0, $header, false);
 
-               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('[%s:%d:] EXIT!', __METHOD__, __LINE__));
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('BASE-FILE-STACK: EXIT!', __METHOD__, __LINE__));
        }
 
        /**
@@ -175,7 +200,7 @@ abstract class BaseFileStack extends BaseStacker {
         * @return      void
         * @todo        Currently the stack file is not cached, please implement a memory-handling class and if enough RAM is found, cache the whole stack file.
         */
-       protected function initFileStack (SplFileInfo $fileInfoInstance, $type) {
+       protected function initFileStack (SplFileInfo $fileInfoInstance, string $type) {
                // Get a stack file instance
                $fileInstance = ObjectFactory::createObjectByConfiguredName('stack_file_class', array($fileInfoInstance, $this));
 
@@ -234,17 +259,15 @@ abstract class BaseFileStack extends BaseStacker {
         * @return      void
         * @throws      FullStackerException    If the stack is full
         */
-       protected function addValue ($stackerName, $value) {
+       protected function addValue (string $stackerName, $value) {
                // Do some tests
                if ($this->isStackFull($stackerName)) {
                        // Stacker is full
                        throw new FullStackerException(array($this, $stackerName, $value), self::EXCEPTION_STACKER_IS_FULL);
                } // END - if
 
-               // Debug message
-               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('[' . __METHOD__ . ':' . __LINE__ . '] stackerName=' . $stackerName . ',value[' . gettype($value) . ']=' . print_r($value, true));
-
                // No objects/resources are allowed as their serialization takes to long
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('[' . __METHOD__ . ':' . __LINE__ . '] stackerName=' . $stackerName . ',value[' . gettype($value) . ']=' . print_r($value, true));
                assert(!is_object($value));
                assert(!is_resource($value));
 
@@ -265,7 +288,7 @@ abstract class BaseFileStack extends BaseStacker {
         * @return      $value                  Value of last added value
         * @throws      EmptyStackerException   If the stack is empty
         */
-       protected function getLastValue ($stackerName) {
+       protected function getLastValue (string $stackerName) {
                // Is the stack not yet initialized or full?
                if ($this->isStackEmpty($stackerName)) {
                        // Throw an exception
@@ -287,7 +310,7 @@ abstract class BaseFileStack extends BaseStacker {
         * @return      $value                  Value of last added value
         * @throws      EmptyStackerException   If the stack is empty
         */
-       protected function getFirstValue ($stackerName) {
+       protected function getFirstValue (string $stackerName) {
                // Is the stack not yet initialized or full?
                if ($this->isStackEmpty($stackerName)) {
                        // Throw an exception
@@ -309,7 +332,7 @@ abstract class BaseFileStack extends BaseStacker {
         * @return      $value                  Value "poped" from array
         * @throws      EmptyStackerException   If the stack is empty
         */
-       protected function popLast ($stackerName) {
+       protected function popLast (string $stackerName) {
                // Is the stack not yet initialized or full?
                if ($this->isStackEmpty($stackerName)) {
                        // Throw an exception
@@ -328,7 +351,7 @@ abstract class BaseFileStack extends BaseStacker {
         * @return      $value                  Value "shifted" from array
         * @throws      EmptyStackerException   If the named stacker is empty
         */
-       protected function popFirst ($stackerName) {
+       protected function popFirst (string $stackerName) {
                // Is the stack not yet initialized or full?
                if ($this->isStackEmpty($stackerName)) {
                        // Throw an exception
@@ -346,7 +369,7 @@ abstract class BaseFileStack extends BaseStacker {
         * @param       $stackerName    Name of the stack
         * @return      $isFull                 Whether the stack is full
         */
-       protected function isStackFull ($stackerName) {
+       protected function isStackFull (string $stackerName) {
                // File-based stacks will only run full if the disk space is low.
                // @TODO Please implement this, returning false
                $isFull = false;
@@ -362,7 +385,7 @@ abstract class BaseFileStack extends BaseStacker {
         * @return      $isEmpty                        Whether the stack is empty
         * @throws      NoStackerException      If given stack is missing
         */
-       public function isStackEmpty ($stackerName) {
+       public function isStackEmpty (string $stackerName) {
                // So, is the stack empty?
                $isEmpty = (($this->getStackCount($stackerName)) == 0);
 
@@ -378,7 +401,7 @@ abstract class BaseFileStack extends BaseStacker {
         * @return      void
         * @throws      UnsupportedOperationException   This method is not (and maybe never will be) supported
         */
-       public function initStack ($stackerName, $forceReInit = false) {
+       public function initStack (string $stackerName, bool $forceReInit = false) {
                throw new UnsupportedOperationException(array($this, __FUNCTION__, $this->getIteratorInstance()->getPointerInstance()), self::EXCEPTION_UNSPPORTED_OPERATION);
        }
 
@@ -388,7 +411,7 @@ abstract class BaseFileStack extends BaseStacker {
         * @return      void
         * @throws      UnsupportedOperationException   This method is not (and maybe never will be) supported
         */
-       public function initStacks (array $stacks, $forceReInit = false) {
+       public function initStacks (array $stacks, bool $forceReInit = false) {
                throw new UnsupportedOperationException(array($this, __FUNCTION__, $this->getIteratorInstance()->getPointerInstance()), self::EXCEPTION_UNSPPORTED_OPERATION);
        }
 
@@ -399,7 +422,7 @@ abstract class BaseFileStack extends BaseStacker {
         * @return      $isInitialized  Whether the stack is initialized
         * @throws      UnsupportedOperationException   This method is not (and maybe never will be) supported
         */
-       public function isStackInitialized ($stackerName) {
+       public function isStackInitialized (string $stackerName) {
                throw new UnsupportedOperationException(array($this, __FUNCTION__, $this->getIteratorInstance()->getPointerInstance()), self::EXCEPTION_UNSPPORTED_OPERATION);
        }
 
@@ -419,7 +442,7 @@ abstract class BaseFileStack extends BaseStacker {
         * @param       $stackerName    Name of the stack
         * @return      $count                  Size of stack (array count)
         */
-       public function getStackCount ($stackerName) {
+       public function getStackCount (string $stackerName) {
                // Now, simply return the found count value, this must be up-to-date then!
                return $this->getIteratorInstance()->getCounter();
        }
@@ -473,7 +496,7 @@ abstract class BaseFileStack extends BaseStacker {
         * @return      void
         * @throws      UnsupportedOperationException   This method is not (and maybe never will be) supported
         */
-       public final function setHeaderSize ($headerSize) {
+       public final function setHeaderSize (int $headerSize) {
                throw new UnsupportedOperationException(array($this, __FUNCTION__, $this->getIteratorInstance()->getPointerInstance()), self::EXCEPTION_UNSPPORTED_OPERATION);
        }
 
@@ -527,8 +550,8 @@ abstract class BaseFileStack extends BaseStacker {
         * @return      void
         * @throws      UnsupportedOperationException   This method is not (and maybe never will be) supported
         */
-       public function writeData ($seekPosition, $data, $flushHeader = true) {
-               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('[%s:%d:] seekPosition=%s,data[]=%s,flushHeader=%d', __METHOD__, __LINE__, $seekPosition, gettype($data), intval($flushHeader)));
+       public function writeData ($seekPosition, $data, bool $flushHeader = true) {
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('BASE-FILE-STACK: seekPosition=%s,data[]=%s,flushHeader=%d', $seekPosition, gettype($data), intval($flushHeader)));
                throw new UnsupportedOperationException(array($this, __FUNCTION__, $this->getIteratorInstance()->getPointerInstance()), self::EXCEPTION_UNSPPORTED_OPERATION);
        }
 
@@ -541,7 +564,7 @@ abstract class BaseFileStack extends BaseStacker {
         * @throws      UnsupportedOperationException   This method is not (and maybe never will be) supported
         */
        public function writeValueToFile ($groupId, $value) {
-               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('[%s:%d:] groupId=%s,value[%s]=%s', __METHOD__, __LINE__, $groupId, gettype($value), print_r($value, true)));
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('BASE-FILE-STACK: groupId=%s,value[%s]=%s', $groupId, gettype($value), print_r($value, true)));
                throw new UnsupportedOperationException(array($this, __FUNCTION__, $this->getIteratorInstance()->getPointerInstance()), self::EXCEPTION_UNSPPORTED_OPERATION);
        }
 
@@ -553,8 +576,8 @@ abstract class BaseFileStack extends BaseStacker {
         * @return      $seekPosition   Found next gap's seek position
         * @throws      UnsupportedOperationException   This method is not (and maybe never will be) supported
         */
-       public function searchNextGap ($length) {
-               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('[%s:%d:] length=%s', __METHOD__, __LINE__, $length));
+       public function searchNextGap (int $length) {
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('BASE-FILE-STACK: length=%s', $length));
                throw new UnsupportedOperationException(array($this, __FUNCTION__, $this->getIteratorInstance()->getPointerInstance()), self::EXCEPTION_UNSPPORTED_OPERATION);
        }
 
@@ -576,11 +599,9 @@ abstract class BaseFileStack extends BaseStacker {
         * @param       $encoded        Encoded value to be written to the file
         * @return      $data           Gap position and length of the raw data
         */
-       public function writeDataToFreeGap ($groupId, $hash, $encoded) {
-               // Debug message
-               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('[%s:%d:] groupId=%s,hash=%s,encoded()=%d - CALLED!', __METHOD__, __LINE__, $groupId, $hash, strlen($encoded)));
-
+       public function writeDataToFreeGap ($groupId, string $hash, $encoded) {
                // Raw data been written to the file
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('BASE-FILE-STACK: groupId=%s,hash=%s,encoded()=%d - CALLED!', $groupId, $hash, strlen($encoded)));
                $rawData = sprintf('%s%s%s%s%s',
                        $groupId,
                        BaseBinaryFile::SEPARATOR_GROUP_HASH,
@@ -589,30 +610,24 @@ abstract class BaseFileStack extends BaseStacker {
                        $encoded
                );
 
-               // Debug message
-               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('[%s:%d:] groupId=%s,hash=%s,rawData()=%d', __METHOD__, __LINE__, $groupId, $hash, strlen($rawData)));
-
                // Search for next free gap
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('BASE-FILE-STACK: groupId=%s,hash=%s,rawData()=%d', $groupId, $hash, strlen($rawData)));
                $gapPosition = $this->getIteratorInstance()->searchNextGap(strlen($rawData));
 
                // Gap position cannot be smaller than header length + 1
                assert($gapPosition > $this->getIteratorInstance()->getHeaderSize());
 
-               // Debug message
-               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('[%s:%d:] groupId=%s,hash=%s,gapPosition=%s', __METHOD__, __LINE__, $groupId, $hash, $gapPosition));
-
                // Then write the data at that gap
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('BASE-FILE-STACK: groupId=%s,hash=%s,gapPosition=%s', $groupId, $hash, $gapPosition));
                $this->getIteratorInstance()->writeData($gapPosition, $rawData);
 
-               // Debug message
-               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('[%s:%d:] groupId=%s,hash=%s,rawData()=%d - EXIT!', __METHOD__, __LINE__, $groupId, $hash, strlen($rawData)));
-
                // Return gap position, hash and length of raw data
-               return array(
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('BASE-FILE-STACK: groupId=%s,hash=%s,rawData()=%d - EXIT!', $groupId, $hash, strlen($rawData)));
+               return [
                        self::ARRAY_INDEX_GAP_POSITION => $gapPosition,
                        self::ARRAY_INDEX_HASH         => $hash,
-                       self::ARRAY_INDEX_DATA_LENGTH  => strlen($rawData)
-               );
+                       self::ARRAY_INDEX_DATA_LENGTH  => strlen($rawData),
+               ];
        }
 
 }
index 8d4a22807de179ad8ab92ad6fb09243f91735bef..d895d1911d15ab342cff8262bdde2ffa714e3009 100644 (file)
@@ -48,22 +48,66 @@ final class StringUtils extends BaseFrameworkSystem {
         * Array with bitmasks and such for pack/unpack methods to support both
         * 32-bit and 64-bit systems
         */
-       private static $packingData = array(
-               32 => array(
+       private static $packingData = [
+               32 => [
                        'step'   => 3,
                        'left'   => 0xffff0000,
                        'right'  => 0x0000ffff,
                        'factor' => 16,
                        'format' => 'II',
-               ),
-               64 => array(
+               ],
+               64 => [
                        'step'   => 7,
                        'left'   => 0xffffffff00000000,
                        'right'  => 0x00000000ffffffff,
                        'factor' => 32,
                        'format' => 'NN'
-               )
-       );
+               ]
+       ];
+
+       /**
+        * Hexadecimal->Decimal translation array
+        */
+       private static $hexdec = [
+               '0' => 0,
+               '1' => 1,
+               '2' => 2,
+               '3' => 3,
+               '4' => 4,
+               '5' => 5,
+               '6' => 6,
+               '7' => 7,
+               '8' => 8,
+               '9' => 9,
+               'a' => 10,
+               'b' => 11,
+               'c' => 12,
+               'd' => 13,
+               'e' => 14,
+               'f' => 15
+       ];
+
+       /**
+        * Decimal->hexadecimal translation array
+        */
+       private static $dechex = [
+                0 => '0',
+                1 => '1',
+                2 => '2',
+                3 => '3',
+                4 => '4',
+                5 => '5',
+                6 => '6',
+                7 => '7',
+                8 => '8',
+                9 => '9',
+               10 => 'a',
+               11 => 'b',
+               12 => 'c',
+               13 => 'd',
+               14 => 'e',
+               15 => 'f'
+       ];
 
        /**
         * Simple 64-bit check, thanks to "Salman A" from stackoverflow.com:
@@ -191,6 +235,144 @@ final class StringUtils extends BaseFrameworkSystem {
                return $price;
        }
 
+       /**
+        * Converts a hexadecimal string, even with negative sign as first string to
+        * a decimal number using BC functions.
+        *
+        * This work is based on comment #86673 on php.net documentation page at:
+        * <http://de.php.net/manual/en/function.dechex.php#86673>
+        *
+        * @param       $hex    Hexadecimal string
+        * @return      $dec    Decimal number
+        */
+       public static function hex2dec (string $hex) {
+               // Convert to all lower-case
+               $hex = strtolower($hex);
+
+               // Detect sign (negative/positive numbers)
+               $sign = '';
+               if (substr($hex, 0, 1) == '-') {
+                       $sign = '-';
+                       $hex = substr($hex, 1);
+               }
+
+               // Decode the hexadecimal string into a decimal number
+               $dec = 0;
+               for ($i = strlen($hex) - 1, $e = 1; $i >= 0; $i--, $e = bcmul($e, 16)) {
+                       $factor = self::$hexdec[substr($hex, $i, 1)];
+                       $dec = bcadd($dec, bcmul($factor, $e));
+               }
+
+               // Return the decimal number
+               return $sign . $dec;
+       }
+
+       /**
+        * Converts even very large decimal numbers, also signed, to a hexadecimal
+        * string.
+        *
+        * This work is based on comment #97756 on php.net documentation page at:
+        * <http://de.php.net/manual/en/function.hexdec.php#97756>
+        *
+        * @param       $dec            Decimal number, even with negative sign
+        * @param       $maxLength      Optional maximum length of the string
+        * @return      $hex    Hexadecimal string
+        */
+       public static function dec2hex (string $dec, int $maxLength = 0) {
+               // maxLength can be zero or devideable by 2
+               assert(($maxLength == 0) || (($maxLength % 2) == 0));
+
+               // Detect sign (negative/positive numbers)
+               $sign = '';
+               if ($dec < 0) {
+                       $sign = '-';
+                       $dec = abs($dec);
+               }
+
+               // Encode the decimal number into a hexadecimal string
+               $hex = '';
+               do {
+                       $hex = self::$dechex[($dec % (2 ^ 4))] . $hex;
+                       $dec /= (2 ^ 4);
+               } while ($dec >= 1);
+
+               /*
+                * Leading zeros are required for hex-decimal "numbers". In some
+                * situations more leading zeros are wanted, so check for both
+                * conditions.
+                */
+               if ($maxLength > 0) {
+                       // Prepend more zeros
+                       $hex = str_pad($hex, $maxLength, '0', STR_PAD_LEFT);
+               } elseif ((strlen($hex) % 2) != 0) {
+                       // Only make string's length dividable by 2
+                       $hex = '0' . $hex;
+               }
+
+               // Return the hexadecimal string
+               return $sign . $hex;
+       }
+
+       /**
+        * Converts a ASCII string (0 to 255) into a decimal number.
+        *
+        * @param       $asc    The ASCII string to be converted
+        * @return      $dec    Decimal number
+        */
+       public static function asc2dec (string $asc) {
+               // Convert it into a hexadecimal number
+               $hex = bin2hex($asc);
+
+               // And back into a decimal number
+               $dec = self::hex2dec($hex);
+
+               // Return it
+               return $dec;
+       }
+
+       /**
+        * Converts a decimal number into an ASCII string.
+        *
+        * @param       $dec            Decimal number
+        * @return      $asc    An ASCII string
+        */
+       public static function dec2asc (string $dec) {
+               // First convert the number into a hexadecimal string
+               $hex = self::dec2hex($dec);
+
+               // Then convert it into the ASCII string
+               $asc = self::hex2asc($hex);
+
+               // Return it
+               return $asc;
+       }
+
+       /**
+        * Converts a hexadecimal number into an ASCII string. Negative numbers
+        * are not allowed.
+        *
+        * @param       $hex    Hexadecimal string
+        * @return      $asc    An ASCII string
+        */
+       public static function hex2asc ($hex) {
+               // Check for length, it must be devideable by 2
+               //* DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('hex='.$hex);
+               assert((strlen($hex) % 2) == 0);
+
+               // Walk the string
+               $asc = '';
+               for ($idx = 0; $idx < strlen($hex); $idx+=2) {
+                       // Get the decimal number of the chunk
+                       $part = hexdec(substr($hex, $idx, 2));
+
+                       // Add it to the final string
+                       $asc .= chr($part);
+               }
+
+               // Return the final string
+               return $asc;
+       }
+
        /**
         * Pack a string into a "binary format". Please execuse me that this is
         * widely undocumented. :-(
index bc3b9d43a5c083e95e26300d544442d8fa3a3c5d..3f3785f042876a95215b9bc043439408c529cccb 100644 (file)
@@ -72,7 +72,7 @@ interface Block extends FrameworkInterface {
         * @param       $headerSize             Size of file header
         * @return      void
         */
-       function setHeaderSize ($headerSize);
+       function setHeaderSize (int $headerSize);
 
        /**
         * Getter for header array
@@ -127,7 +127,7 @@ interface Block extends FrameworkInterface {
         * @param       $encoded        Encoded value to be written to the file
         * @return      $data           Gap position and length of the raw data
         */
-       function writeDataToFreeGap ($groupId, $hash, $encoded);
+       function writeDataToFreeGap ($groupId, string $hash, $encoded);
 
        /**
         * Writes data at given position
@@ -137,7 +137,7 @@ interface Block extends FrameworkInterface {
         * @param       $flushHeader    Whether to flush the header (default: flush)
         * @return      void
         */
-       function writeData ($seekPosition, $data, $flushHeader = true);
+       function writeData ($seekPosition, $data, bool $flushHeader = true);
 
        /**
         * Searches for next suitable gap the given length of data can fit in
@@ -146,6 +146,6 @@ interface Block extends FrameworkInterface {
         * @param       $length                 Length of raw data
         * @return      $seekPosition   Found next gap's seek position
         */
-       function searchNextGap ($length);
+       function searchNextGap (int $length);
 
 }
index 91bcebfdba97ab433f15a642a929e527aacf0ef8..e2c9fe4718c4efd49ca87a61c21ae5598af7c0ce 100644 (file)
@@ -106,7 +106,7 @@ interface SeekableWritableFileIterator extends SeekableIterator {
         * @param       $headerSize             Size of file header
         * @return      void
         */
-       function setHeaderSize ($headerSize);
+       function setHeaderSize (int $headerSize);
 
        /**
         * Getter for header array
@@ -152,7 +152,7 @@ interface SeekableWritableFileIterator extends SeekableIterator {
         * @param       $flushHeader    Whether to flush the header (default: flush)
         * @return      void
         */
-       function writeData ($seekPosition, $data, $flushHeader = true);
+       function writeData ($seekPosition, $data, bool $flushHeader = true);
 
        /**
         * Getter for seek position
@@ -178,7 +178,7 @@ interface SeekableWritableFileIterator extends SeekableIterator {
         * @param       $encoded        Encoded value to be written to the file
         * @return      $data           Gap position and length of the raw data
         */
-       function writeDataToFreeGap ($groupId, $hash, $encoded);
+       function writeDataToFreeGap ($groupId, string $hash, $encoded);
 
        /**
         * Searches for next suitable gap the given length of data can fit in
@@ -187,6 +187,6 @@ interface SeekableWritableFileIterator extends SeekableIterator {
         * @param       $length                 Length of raw data
         * @return      $seekPosition   Found next gap's seek position
         */
-       function searchNextGap ($length);
+       function searchNextGap (int $length);
 
 }
index c2574b4b46c5faf68004f3e9c2df4db883c917fb..79199068ebbcbb32ee5efb0867be0ae8ef1d9d0c 100644 (file)
@@ -36,7 +36,7 @@ interface Stackable extends FrameworkInterface {
         * @return      void
         * @throws      StackerFullException    If the stacker is full
         */
-       function pushNamed ($stackerName, $value);
+       function pushNamed (string $stackerName, $value);
 
        /**
         * 'Pops' a value from a named stacker and returns it's value
@@ -46,7 +46,7 @@ interface Stackable extends FrameworkInterface {
         * @throws      NoStackerException      If the named stacker was not found
         * @throws      EmptyStackerException   If the named stacker is empty
         */
-       function popNamed ($stackerName);
+       function popNamed (string $stackerName);
 
        /**
         * Get value from named stacker but don't "pop" it
@@ -56,7 +56,7 @@ interface Stackable extends FrameworkInterface {
         * @throws      NoStackerException      If the named stacker was not found
         * @throws      EmptyStackerException   If the named stacker is empty
         */
-       function getNamed ($stackerName);
+       function getNamed (string $stackerName);
 
        /**
         * Checks whether the given stack is initialized (set in array $stackers)
@@ -64,7 +64,7 @@ interface Stackable extends FrameworkInterface {
         * @param       $stackerName    Name of the stack
         * @return      $isInitialized  Whether the stack is initialized
         */
-       function isStackInitialized ($stackerName);
+       function isStackInitialized (string $stackerName);
 
        /**
         * Checks whether the given stack is empty
@@ -73,6 +73,6 @@ interface Stackable extends FrameworkInterface {
         * @return      $isEmpty                        Whether the stack is empty
         * @throws      NoStackerException      If given stack is missing
         */
-       function isStackEmpty ($stackerName);
+       function isStackEmpty (string $stackerName);
 
 }
index 8c47444eac94130687f6c9d7a6aafdf71464825b..257bb3fa4164c29e29d321d99219d599a4f21d64 100644 (file)
@@ -4,6 +4,7 @@ namespace Org\Mxchange\CoreFramework\Middleware;
 
 // Import framework stuff
 use Org\Mxchange\CoreFramework\Object\BaseFrameworkSystem;
+use Org\Mxchange\CoreFramework\Stream\Output\OutputStreamer;
 
 /**
  * An abstract middleware class for all other middlware classes
@@ -28,6 +29,11 @@ use Org\Mxchange\CoreFramework\Object\BaseFrameworkSystem;
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 abstract class BaseMiddleware extends BaseFrameworkSystem {
+       /**
+        * The concrete output instance
+        */
+       private $outputInstance = NULL;
+
        /**
         * Protected constructor
         *
@@ -39,4 +45,23 @@ abstract class BaseMiddleware extends BaseFrameworkSystem {
                parent::__construct($className);
        }
 
+       /**
+        * Setter for output instance
+        *
+        * @param       $outputInstance The debug output instance
+        * @return      void
+        */
+       protected final function setOutputInstance (OutputStreamer $outputInstance) {
+               $this->outputInstance = $outputInstance;
+       }
+
+       /**
+        * Getter for output instance
+        *
+        * @return      $outputInstance The debug output instance
+        */
+       protected final function getOutputInstance () {
+               return $this->outputInstance;
+       }
+
 }
index 9e18693c4456e5f42e04f69a89da0107571f58fb..0d91375463355534266ab25da95a6d059e8a305a 100644 (file)
@@ -64,7 +64,7 @@ class DebugMiddleware extends BaseMiddleware implements Registerable {
         *                                                      configured for
         * @return      $debugInstance  An instance of this middleware class
         */
-       public static final function createDebugMiddleware ($outputClass, $className) {
+       public static final function createDebugMiddleware (string $outputClass, string $className) {
                //* DEBUG-DIE: */ die(__METHOD__.': outputClass=' . $outputClass . ',className=' . $className);
 
                // Create an instance if this middleware
@@ -119,7 +119,7 @@ class DebugMiddleware extends BaseMiddleware implements Registerable {
         * @param       $stripTags      Whether HTML tags shall be stripped out
         * @return      void
         */
-       public final function output ($outStream, $stripTags = false) {
+       public final function output (string $outStream, bool $stripTags = false) {
                // Is the output stream set
                if (empty($outStream)) {
                        // @TODO Initialization phase