package KinoSearch::Util::CClass; use strict; use warnings; use KinoSearch::Util::ToolSet; use base('KinoSearch::Util::Class'); 1; __END__ __H__ #ifndef H_KINO_CCLASS #define H_KINO_CCLASS 1 #include "EXTERN.h" #include "perl.h" #include "XSUB.h" #include "KinoSearchUtilCarp.h" #define KINO_START_SET_OR_GET_SWITCH \ /* if called as a setter, make sure the extra arg is there */ \ if (ix % 2 == 1 && items != 2) \ croak("usage: $seg_term_enum->set_xxxxxx($val)"); \ switch (ix) { #define KINO_END_SET_OR_GET_SWITCH \ default: Kino_confess("Internal error. ix: %d", ix); \ RETVAL = &PL_sv_undef; /* quiet compiler warning */ \ break; /* probably unreachable */ \ } #define Kino_extract_struct( perl_obj, dest, cname, class ) \ if (sv_derived_from( perl_obj, class )) { \ IV tmp = SvIV( (SV*)SvRV(perl_obj) ); \ dest = INT2PTR(cname, tmp); \ } \ else { \ dest = NULL; /* suppress unused var warning */ \ Kino_confess("not a %s", class); \ } #define Kino_extract_anon_struct( perl_obj, dest ) \ if (sv_derived_from( perl_obj, "KinoSearch::Util::CClass" )) { \ IV tmp = SvIV( (SV*)SvRV(perl_obj) ); \ dest = INT2PTR(void*, tmp); \ } \ else { \ dest = NULL; /* suppress unused var warning */ \ Kino_confess("not derived from KinoSearch::Util::CClass"); \ } #define Kino_extract_struct_from_hv(hash, dest, key, key_len, cname, class) \ { \ SV **sv_ptr; \ sv_ptr = hv_fetch(hash, key, key_len, 0); \ if (sv_ptr == NULL) \ Kino_confess("Failed to retrieve hash entry '%s'", key); \ if (sv_derived_from( *sv_ptr, class )) { \ IV tmp = SvIV( (SV*)SvRV(*sv_ptr) ); \ dest = INT2PTR(cname, tmp); \ } \ else { \ dest = NULL; /* suppress unused var warning */ \ Kino_confess("not a %s", class); \ } \ } #endif /* include guard */ __POD__ =begin devdocs =head1 NAME KinoSearch::Util::CClass - base class for C-struct objects =head1 DESCRIPTION KinoSearch's C-struct objects use this as a base class, rather than KinoSearch::Util::Class. =head1 COPYRIGHT Copyright 2005-2006 Marvin Humphrey =head1 LICENSE, DISCLAIMER, BUGS, etc. See L version 0.13. =end devdocs =cut