]> git.mxchange.org Git - core.git/blobdiff - framework/main/classes/iterator/file/class_FileIterator.php
Rewrites:
[core.git] / framework / main / classes / iterator / file / class_FileIterator.php
index a246927c02e4585c810e0af7eb4d7743d8f12c6f..24fb278033b8a1b2cfa0dbfbda16119ed5cd4317 100644 (file)
@@ -153,11 +153,10 @@ class FileIterator extends BaseIterator implements SeekableWritableFileIterator
        public function rewind () {
                // Call block instance
                /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('FILE-ITERATOR: CALLED!');
-               $status = $this->getBlockInstance()->rewind();
+               $this->getBlockInstance()->rewind();
 
-               // Return status
-               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('FILE-ITERATOR: status=%d - EXIT!', intval($status)));
-               return $status;
+               // Trace message
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('FILE-ITERATOR: EXIT!');
        }
 
        /**
@@ -180,19 +179,20 @@ class FileIterator extends BaseIterator implements SeekableWritableFileIterator
         * Seeks to given position
         *
         * @param       $seekPosition   Seek position in file
+        * @param       $whence                 Added to offset (default: only use offset to seek to)
         * @return      $status                 Status of this operation
         * @throws      InvalidArgumentException        If a parameter is not valid
         */
-       public function seek (int $seekPosition) {
+       public function seek (int $seekPosition, int $whence = SEEK_SET) {
                // Validate parameter
-               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('FILE-ITERATOR: seekPosition=%d - CALLED!', $seekPosition));
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('FILE-ITERATOR: seekPosition=%d,whence=%d - CALLED!', $seekPosition, $whence));
                if ($seekPosition < 0) {
                        // Throw IAE
                        throw new InvalidArgumentException(sprintf('seekPosition=%d is not valid', $seekPosition));
                }
 
                // Call block instance
-               $status = $this->getBlockInstance()->seek($seekPosition);
+               $status = $this->getBlockInstance()->seek($seekPosition, $whence);
 
                // Return status
                /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('FILE-ITERATOR: status=%d - EXIT!', intval($status)));
@@ -445,12 +445,41 @@ class FileIterator extends BaseIterator implements SeekableWritableFileIterator
                }
 
                // Call block instance
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('FILE-ITERATOR: Calling this->blockInstance->writeData(%d,data()=%d,%d) ...', $seekPosition, strlen($data), intval($flushHeader)));
                $this->getBlockInstance()->writeData($seekPosition, $data, $flushHeader);
 
                // Trace message
                /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('FILE-ITERATOR: EXIT!');
        }
 
+       /**
+        * Writes at given position by seeking to it.
+        *
+        * @param       $seekPosition   Seek position in file
+        * @param       $dataStream             Data to be written
+        * @return      mixed                   Number of writes bytes or false on error
+        * @throws      InvalidArgumentException        If a parameter is not valid
+        */
+       public function writeAtPosition (int $seekPosition, string $dataStream) {
+               // Validate parameter
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('FILE-ITERATOR: seekPosition=%d,dataStream(%d)=%s - CALLED!', $seekPosition, strlen($dataStream), $dataStream));
+               if ($seekPosition < 0) {
+                       // Invalid seek position
+                       throw new InvalidArgumentException(sprintf('seekPosition=%d is not valid.', $seekPosition));
+               } elseif (empty($dataStream)) {
+                       // Empty dataStream
+                       throw new InvalidArgumentException('Parameter "dataStream" is empty');
+               }
+
+               // Call iterated object's method
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('FILE-ITERATOR: Calling this->blockInstance->writeAtPosition(%d, %s) ...', $seekPosition, $dataStream));
+               $status = $this->getBlockInstance()->writeAtPosition($seekPosition, $dataStream);
+
+               // Return status
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('FILE-ITERATOR: status[%s]=%d - EXIT!', gettype($status), $status));
+               return $status;
+       }
+
        /**
         * Getter for seek position
         *
@@ -462,7 +491,7 @@ class FileIterator extends BaseIterator implements SeekableWritableFileIterator
                $seekPosition = $this->getBlockInstance()->getSeekPosition();
 
                // Return position
-               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('FILE-ITERATOR: seekPosition=%d - EXIT!', $seekPosition));
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('FILE-ITERATOR: seekPosition[%s]=%d - EXIT!', gettype($seekPosition), $seekPosition));
                return $seekPosition;
        }
 
@@ -533,7 +562,7 @@ class FileIterator extends BaseIterator implements SeekableWritableFileIterator
                $seekPosition = $this->getBlockInstance()->searchNextGap($length);
 
                // Return position
-               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('FILE-ITERATOR: seekPosition=%d - EXIT!', $seekPosition));
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('FILE-ITERATOR: seekPosition[%s]=%d - EXIT!', gettype($seekPosition), $seekPosition));
                return $seekPosition;
        }