public function parse($stream)
    {
        if ( ! ($this->isValidStream($stream))) {
            throw new \InvalidArgumentException(__METHOD__.' requires a valid stream resource');
        }

        $original_position = \ftell($stream);
        try {
            \fseek($stream, 0);

            return new PaddedTableNode($this->readCSVRows($stream));

        } finally {
            \fseek($stream, $original_position);
        }
    }