=head1 NAME

XS::Framework::Manual::SVAPI::Io - XS::Framework IO C++ class reference

=head1 Io

=head2 Overview

The C<Io> class is the wrapper around Perls C<IO*> type. As with other type, it might hold an underlying Perl C<SV*> or might not.

The C<Io> object does not holds C<undef>; if C<undef> is assigned or supplied
in constructor, the object is considered I<empty>. In other words the
C<undef> and C<NULL> have the same meaning for the class.

An C<IO> is a structure which corresponds to a Perl file handles, sockets, pipes, etc, for example C<*STDOUT{IO}>.

=head2 Construction

To create an wrapper around existing C<IO*> the following constructors can be used:

    Io (std::nullptr_t = nullptr)
    Io (SV* sv, bool policy = INCREMENT)
    Io (GV* sv, bool policy = INCREMENT)
    Io (IO* sv, bool policy = INCREMENT)
    Io (const Io& oth)
    Io (Io&&      oth)
    Io (const Sv& oth)
    Io (Sv&&      oth)

If arguments is C<undef> or C<NULL>, the returned C<Io> object will be
empty.

Supported values are

=over

=item IO

=item Reference to IO

=item Glob containing non-null IO slot

=item Reference to glob containing non-null IO slot

=back

Otherwise, if unappropriate value is supplied, then exception will be
thrown.

As with all other SVAPI classes, assigment operators, C<get>, C<set> and dereferencing are supported.

=head2 int fileno() const

Returns file descriptor of underlying PerlIO. This method is NULL-unsafe.

=head2 char iotype() const

Returns the type of underlying PerlIO as per C<IoTYPE()>. This method is NULL-unsafe.

=cut
