# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

TYPEMAP
CFCBase*	CLOWNFISH_TYPE
CFCCBlock*	CLOWNFISH_MODEL
CFCCallable*	CLOWNFISH_MODEL
CFCClass*	CLOWNFISH_MODEL
CFCDocuComment*	CLOWNFISH_MODEL
CFCFile*	CLOWNFISH_MODEL
CFCFileSpec*	CLOWNFISH_MODEL
CFCFunction*	CLOWNFISH_MODEL
CFCHierarchy*	CLOWNFISH_MODEL
CFCMethod*	CLOWNFISH_MODEL
CFCMemPool*	CLOWNFISH_TYPE
CFCParamList*	CLOWNFISH_MODEL
CFCParcel*	CLOWNFISH_MODEL
CFCParser*	CLOWNFISH_TYPE
CFCPrereq*	CLOWNFISH_MODEL
CFCSymbol*	CLOWNFISH_MODEL
CFCTest*	CLOWNFISH_TYPE
CFCType*	CLOWNFISH_MODEL
CFCVariable*	CLOWNFISH_MODEL
CFCVersion*	CLOWNFISH_MODEL
CFCBindCore*	CLOWNFISH_BINDING_CORE
CFCBindClass*	CLOWNFISH_BINDING_CORE_TYPE
CFCPerl*	CLOWNFISH_BINDING_PERL
CFCPerlSub*	CLOWNFISH_BINDING_PERL_SUBROUTINE
CFCPerlClass*	CLOWNFISH_BINDING_PERL_COMMON
CFCPerlConstructor*	CLOWNFISH_BINDING_PERL_COMMON
CFCPerlMethod*	CLOWNFISH_BINDING_PERL_COMMON
CFCPerlPod*	CLOWNFISH_BINDING_PERL_COMMON

INPUT

CLOWNFISH_MODEL
	if (!SvOK($arg)) {
        $var = NULL;
    }
	else if (sv_derived_from($arg, \"${(my $t = $type) =~ s/CFC(\w+).*/Clownfish::CFC::Model::$1/;\$t}\")) {
		IV objint = SvIV((SV*)SvRV($arg));
		$var = INT2PTR($type, objint);
	}
    else {
		croak(\"Not a ${(my $t = $type) =~ s/CFC(\w+).*/Clownfish::CFC::Model::$1/;\$t}\");
	}

CLOWNFISH_TYPE
	if (!SvOK($arg)) {
        $var = NULL;
    }
	else if (sv_derived_from($arg, \"${(my $t = $type) =~ s/CFC(\w+).*/Clownfish::CFC::$1/;\$t}\")) {
		IV objint = SvIV((SV*)SvRV($arg));
		$var = INT2PTR($type, objint);
	}
    else {
		croak(\"Not a ${(my $t = $type) =~ s/CFC(\w+).*/Clownfish::CFC::$1/;\$t}\");
	}

CLOWNFISH_BINDING_CORE
	if (!SvOK($arg)) {
        $var = NULL;
    }
	else if (sv_derived_from($arg, \"Clownfish::CFC::Binding::Core\")) {
		IV objint = SvIV((SV*)SvRV($arg));
		$var = INT2PTR($type, objint);
	}
    else {
		croak(\"Not a Clownfish::CFC::Binding::Core\");
	}

CLOWNFISH_BINDING_CORE_TYPE
	if (!SvOK($arg)) {
        $var = NULL;
    }
	else if (sv_derived_from($arg, \"${(my $t = $type) =~ s/CFCBind(\w+).*/Clownfish::CFC::Binding::Core::$1/;\$t}\")) {
		IV objint = SvIV((SV*)SvRV($arg));
		$var = INT2PTR($type, objint);
	}
    else {
		croak(\"Not a ${(my $t = $type) =~ s/CFCBind(\w+).*/Clownfish::CFC::Binding::Core::$1/;\$t}\");
	}

CLOWNFISH_BINDING_PERL
	if (!SvOK($arg)) {
        $var = NULL;
    }
	else if (sv_derived_from($arg, \"Clownfish::CFC::Binding::Perl\")) {
		IV objint = SvIV((SV*)SvRV($arg));
		$var = INT2PTR($type, objint);
	}
    else {
		croak(\"Not a Clownfish::CFC::Binding::Perl\");
	}


CLOWNFISH_BINDING_PERL_SUBROUTINE
	if (!SvOK($arg)) {
        $var = NULL;
    }
	else if (sv_derived_from($arg, \"Clownfish::CFC::Binding::Perl::Subroutine\")) {
		IV objint = SvIV((SV*)SvRV($arg));
		$var = INT2PTR($type, objint);
	}
    else {
		croak(\"Not a Clownfish::CFC::Binding::Perl::Subroutine\");
	}

CLOWNFISH_BINDING_PERL_COMMON
	if (!SvOK($arg)) {
        $var = NULL;
    }
	else if (sv_derived_from($arg, \"${(my $t = $type) =~ s/CFCPerl(\w+).*/Clownfish::CFC::Binding::Perl::$1/;\$t}\")) {
		IV objint = SvIV((SV*)SvRV($arg));
		$var = INT2PTR($type, objint);
	}
    else {
		croak(\"Not a ${(my $t = $type) =~ s/CFCPerl(\w+).*/Clownfish::CFC::Binding::Perl::$1/;\$t}\");
	}


OUTPUT

CLOWNFISH_MODEL
	sv_setref_pv($arg, \"${(my $t = $type) =~ s/CFC(\w+).*/Clownfish::CFC::Model::$1/;\$t}\", (void*)$var);

CLOWNFISH_TYPE
	sv_setref_pv($arg, \"${(my $t = $type) =~ s/CFC(\w+).*/Clownfish::CFC::$1/;\$t}\", (void*)$var);

CLOWNFISH_BINDING_CORE
	sv_setref_pv($arg, \"Clownfish::CFC::Binding::Core\", (void*)$var);

CLOWNFISH_BINDING_CORE_TYPE
	sv_setref_pv($arg, \"${(my $t = $type) =~ s/CFCBind(\w+).*/Clownfish::CFC::Binding::Core::$1/;\$t}\", (void*)$var);

CLOWNFISH_BINDING_PERL
	sv_setref_pv($arg, \"Clownfish::CFC::Binding::Perl\", (void*)$var);

CLOWNFISH_BINDING_PERL_COMMON
	sv_setref_pv($arg, \"${(my $t = $type) =~ s/CFCPerl(\w+).*/Clownfish::CFC::Binding::Perl::$1/;\$t}\", (void*)$var);

CLOWNFISH_BINDING_PERL_SUBROUTINE
	sv_setref_pv($arg, \"Clownfish::CFC::Binding::Perl::Subroutine\", (void*)$var);

