# Copyright 2013 Jeffrey Kegler
# This file is part of Marpa::R2.  Marpa::R2 is free software: you can
# redistribute it and/or modify it under the terms of the GNU Lesser
# General Public License as published by the Free Software Foundation,
# either version 3 of the License, or (at your option) any later version.
#
# Marpa::R2 is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser
# General Public License along with Marpa::R2.  If not, see
# http://www.gnu.org/licenses/.

G_Wrapper * T_MARPA_G_W
R_Wrapper * T_MARPA_R_W
Unicode_Stream * T_UNICODE_STREAM
B_Wrapper * T_MARPA_B_W
O_Wrapper * T_MARPA_O_W
T_Wrapper * T_MARPA_T_W
V_Wrapper * T_MARPA_V_W
Scanless_G * T_SCANLESS_G
Scanless_R * T_SCANLESS_R

Marpa_Rank T_IV
Marpa_Symbol_ID T_IV
Marpa_Rule_ID T_IV
Marpa_IRL_ID T_IV
Marpa_ISY_ID T_IV
Marpa_AHFA_Item_ID T_IV
Marpa_AHFA_State_ID T_IV
Marpa_Earley_Set_ID T_IV
Marpa_Earley_Item_ID T_IV
Marpa_Earleme T_IV
Marpa_Or_Node_ID T_IV
Marpa_And_Node_ID T_IV
Marpa_Nook_ID T_IV

INPUT

T_MARPA_G_W
	if (sv_isa($arg, \"Marpa::R2::Thin::G\")) {
	    IV tmp = SvIV((SV*)SvRV($arg));
	    $var = INT2PTR(G_Wrapper *, tmp);
	} else
	    Perl_croak(aTHX_ \"%s: %s is not of type Marpa::R2::Thin::G\",
			${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
			\"$var\")

T_MARPA_R_W
	if (sv_isa($arg, \"Marpa::R2::Thin::R\")) {
	    IV tmp = SvIV((SV*)SvRV($arg));
	    $var = INT2PTR(R_Wrapper *, tmp);
	} else
	    Perl_croak(aTHX_ \"%s: %s is not of type Marpa::R2::Thin::R\",
			${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
			\"$var\")

T_UNICODE_STREAM
	if (sv_isa($arg, \"Marpa::R2::Thin::U\")) {
	    IV tmp = SvIV((SV*)SvRV($arg));
	    $var = INT2PTR(Unicode_Stream *, tmp);
	} else
	    Perl_croak(aTHX_ \"%s: %s is not of type Marpa::R2::Thin::U\",
			${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
			\"$var\")

T_MARPA_B_W
	if (sv_isa($arg, \"Marpa::R2::Thin::B\")) {
	    IV tmp = SvIV((SV*)SvRV($arg));
	    $var = INT2PTR(B_Wrapper *, tmp);
	} else
	    Perl_croak(aTHX_ \"%s: %s is not of type Marpa::R2::Thin::B\",
			${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
			\"$var\")

T_MARPA_O_W
	if (sv_isa($arg, \"Marpa::R2::Thin::O\")) {
	    IV tmp = SvIV((SV*)SvRV($arg));
	    $var = INT2PTR(O_Wrapper *, tmp);
	} else
	    Perl_croak(aTHX_ \"%s: %s is not of type Marpa::R2::Thin::O\",
			${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
			\"$var\")

T_MARPA_T_W
	if (sv_isa($arg, \"Marpa::R2::Thin::T\")) {
	    IV tmp = SvIV((SV*)SvRV($arg));
	    $var = INT2PTR(T_Wrapper *, tmp);
	} else
	    Perl_croak(aTHX_ \"%s: %s is not of type Marpa::R2::Thin::T\",
			${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
			\"$var\")

T_MARPA_V_W
	if (sv_isa($arg, \"Marpa::R2::Thin::V\")) {
	    IV tmp = SvIV((SV*)SvRV($arg));
	    $var = INT2PTR(V_Wrapper *, tmp);
	} else
	    Perl_croak(aTHX_ \"%s: %s is not of type Marpa::R2::Thin::V\",
			${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
			\"$var\")

T_SCANLESS_G
	if (sv_isa($arg, \"Marpa::R2::Thin::SLG\")) {
	    IV tmp = SvIV((SV*)SvRV($arg));
	    $var = INT2PTR(Scanless_G *, tmp);
	} else
	    Perl_croak(aTHX_ \"%s: %s is not of type Marpa::R2::Thin::SLG\",
			${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
			\"$var\")


T_SCANLESS_R
	if (sv_isa($arg, \"Marpa::R2::Thin::SLR\")) {
	    IV tmp = SvIV((SV*)SvRV($arg));
	    $var = INT2PTR(Scanless_R *, tmp);
	} else
	    Perl_croak(aTHX_ \"%s: %s is not of type Marpa::R2::Thin::SLR\",
			${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
			\"$var\")

