<?php

/**
 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
 * SPDX-License-Identifier: Apache-2.0.
 */
namespace XCloner\AWS\CRT\IO;

if (!defined('ABSPATH') && \PHP_SAPI !== 'cli') {
    die;
}
use XCloner\AWS\CRT\NativeResource as NativeResource;
final class InputStream extends NativeResource
{
    private $stream = null;
    const SEEK_BEGIN = 0;
    const SEEK_END = 2;
    public function __construct($stream)
    {
        $this->stream = $stream;
        $options = self::$crt->input_stream_options_new();
        // The stream implementation in native just converts the PHP stream into
        // a native php_stream* and executes operations entirely in native
        self::$crt->input_stream_options_set_user_data($options, $stream);
        $this->acquire(self::$crt->input_stream_new($options));
        self::$crt->input_stream_options_release($options);
    }
    public function __destruct()
    {
        self::$crt->input_stream_release($this->release());
        parent::__destruct();
    }
    public function eof()
    {
        return self::$crt->input_stream_eof($this->native);
    }
    public function length()
    {
        return self::$crt->input_stream_get_length($this->native);
    }
    public function read($length = 0)
    {
        if ($length == 0) {
            $length = $this->length();
        }
        return self::$crt->input_stream_read($this->native, $length);
    }
    public function seek($offset, $basis)
    {
        return self::$crt->input_stream_seek($this->native, $offset, $basis);
    }
}
