i figured it out, i think, based on getGrammarType and bless $self

On Wed, 13 Mar 2002, John Utz wrote:

> ok
> 
> On 13 Mar 2002, (Jason E. Stewart) wrote:
> > 
> > Ok. You're getting bitten by the SWIG-casts-things-to-the-base-class
> > problem. Look at the class of the object your code printed out:
> > XML::Xerces::Grammar into the bless command.
> > 
> > The way we get around this for the other class hierarchies is to use a
> > method called actual_cast() to re-bless the object into the
> > appropriate subclass:
> > 
> >   package XML::Xerces::DOM_Node;
> > 
> >   sub actual_cast {
> >     return undef unless _isa( ref($_[0]), 'XML::Xerces::DOM_Node' );
> >     return $_[0] if $_[0]->isNull;
> >   
> >     my $node_type = $_[0]->getNodeType;
> >     return _reinterpret_cast('XML::Xerces::DOM_Text', $_[0])
> 
> this is a great idea, but how the heck do i resolve the type of Grammar
> Class?
> 
> note that in the example that you provide, you are blessed with the
> function getNodeType, because you are working with a DOM.
> 
> suggestions? wild ass guesses?
> 
> here's the 2 implementations sucked outta my Xerces.pm
> 
> ############# Class : XML::Xerces::Grammar ##############
> 
> package XML::Xerces::Grammar;
> @ISA = qw( XML::Xerces );
> %OWNER = ();
> %ITERATORS = ();
> *DTDGrammarType = *XML::Xercesc::Grammar_DTDGrammarType;
> *SchemaGrammarType = *XML::Xercesc::Grammar_SchemaGrammarType;
> *UNKNOWN_SCOPE = *XML::Xercesc::Grammar_UNKNOWN_SCOPE;
> *TOP_LEVEL_SCOPE = *XML::Xercesc::Grammar_TOP_LEVEL_SCOPE;
> 
> *getGrammarType = *XML::Xercesc::Grammar_getGrammarType;
> *getTargetNamespace = *XML::Xercesc::Grammar_getTargetNamespace;
> sub findOrAddElemDecl {
>     my @args = @_;
>     my $result = XML::Xercesc::Grammar_findOrAddElemDecl(@args);
>     return $result unless ref($result) =~ m[XML::Xerces];
>     my %resulthash;
>     tie %resulthash, ref($result), $result;
>     return bless \%resulthash, ref($result);
> }
> *getElemId = *XML::Xercesc::Grammar_getElemId;
> sub getElemDecl {
>     my @args = @_;
>     my $result = XML::Xercesc::Grammar_getElemDecl(@args);
>     return $result unless ref($result) =~ m[XML::Xerces];
>     my %resulthash;
>     tie %resulthash, ref($result), $result;
>     return bless \%resulthash, ref($result);
> }
> *getNotationDecl = *XML::Xercesc::Grammar_getNotationDecl;
> sub putElemDecl {
>     my @args = @_;
>     my $result = XML::Xercesc::Grammar_putElemDecl(@args);
>     return $result unless ref($result) =~ m[XML::Xerces];
>     my %resulthash;
>     tie %resulthash, ref($result), $result;
>     return bless \%resulthash, ref($result);
> }
> *putNotationDecl = *XML::Xercesc::Grammar_putNotationDecl;
> *reset = *XML::Xercesc::Grammar_reset;
> 
> 
> ############# Class : XML::Xerces::SchemaGrammar ##############
> 
> package XML::Xerces::SchemaGrammar;
> @ISA = qw( XML::Xerces XML::Xerces::Grammar );
> %OWNER = ();
> %ITERATORS = ();
> sub new {
>     my $pkg = shift;
>     my @args = @_;
>     my $self = XML::Xercesc::new_SchemaGrammar(@args);
>     return undef if (!defined($self));
>     bless $self, "XML::Xerces::SchemaGrammar";
>     $OWNER{$self} = 1;
>     my %retval;
>     tie %retval, "XML::Xerces::SchemaGrammar", $self;
>     return bless \%retval, $pkg;
> }
> 
> 
> *getGrammarType = *XML::Xercesc::SchemaGrammar_getGrammarType;
> *getTargetNamespace = *XML::Xercesc::SchemaGrammar_getTargetNamespace;
> sub findOrAddElemDecl {
>     my @args = @_;
>     my $result = XML::Xercesc::SchemaGrammar_findOrAddElemDecl(@args);
>     return $result unless ref($result) =~ m[XML::Xerces];
>     my %resulthash;
>     tie %resulthash, ref($result), $result;
>     return bless \%resulthash, ref($result);
> }
> *getElemId = *XML::Xercesc::SchemaGrammar_getElemId;
> sub getElemDecl {
>     my @args = @_;
>     my $result = XML::Xercesc::SchemaGrammar_getElemDecl(@args);
>     return $result unless ref($result) =~ m[XML::Xerces];
>     my %resulthash;
>     tie %resulthash, ref($result), $result;
>     return bless \%resulthash, ref($result);
> }
> *getNotationDecl = *XML::Xercesc::SchemaGrammar_getNotationDecl;
> sub putElemDecl {
>     my @args = @_;
>     my $result = XML::Xercesc::SchemaGrammar_putElemDecl(@args);
>     return $result unless ref($result) =~ m[XML::Xerces];
>     my %resulthash;
>     tie %resulthash, ref($result), $result;
>     return bless \%resulthash, ref($result);
> }
> *putNotationDecl = *XML::Xercesc::SchemaGrammar_putNotationDecl;
> *reset = *XML::Xercesc::SchemaGrammar_reset;
> *getElemEnumerator = *XML::Xercesc::SchemaGrammar_getElemEnumerator;
> *getAttributeDeclRegistry =
> *XML::Xercesc::SchemaGrammar_getAttributeDeclRegistry;
> *getComplexTypeRegistry =
> *XML::Xercesc::SchemaGrammar_getComplexTypeRegistry;
> *getGroupInfoRegistry = *XML::Xercesc::SchemaGrammar_getGroupInfoRegistry;
> *getAttGroupInfoRegistry =
> *XML::Xercesc::SchemaGrammar_getAttGroupInfoRegistry;
> sub getDatatypeRegistry {
>     my @args = @_;
>     my $result = XML::Xercesc::SchemaGrammar_getDatatypeRegistry(@args);
>     return $result unless ref($result) =~ m[XML::Xerces];
>     my %resulthash;
>     tie %resulthash, ref($result), $result;
>     return bless \%resulthash, ref($result);
> }
> sub getNamespaceScope {
>     my @args = @_;
>     my $result = XML::Xercesc::SchemaGrammar_getNamespaceScope(@args);
>     return $result unless ref($result) =~ m[XML::Xerces];
>     my %resulthash;
>     tie %resulthash, ref($result), $result;
>     return bless \%resulthash, ref($result);
> }
> *getValidSubstitutionGroups =
> *XML::Xercesc::SchemaGrammar_getValidSubstitutionGroups;
> *getIDRefList = *XML::Xercesc::SchemaGrammar_getIDRefList;
> *getUPAChecked = *XML::Xercesc::SchemaGrammar_getUPAChecked;
> *setTargetNamespace = *XML::Xercesc::SchemaGrammar_setTargetNamespace;
> *setAttributeDeclRegistry =
> *XML::Xercesc::SchemaGrammar_setAttributeDeclRegistry;
> *setComplexTypeRegistry =
> *XML::Xercesc::SchemaGrammar_setComplexTypeRegistry;
> *setGroupInfoRegistry = *XML::Xercesc::SchemaGrammar_setGroupInfoRegistry;
> *setAttGroupInfoRegistry =
> *XML::Xercesc::SchemaGrammar_setAttGroupInfoRegistry;
> *setDatatypeRegistry = *XML::Xercesc::SchemaGrammar_setDatatypeRegistry;
> *setNamespaceScope = *XML::Xercesc::SchemaGrammar_setNamespaceScope;
> *setValidSubstitutionGroups =
> *XML::Xercesc::SchemaGrammar_setValidSubstitutionGroups;
> *setUPAChecked = *XML::Xercesc::SchemaGrammar_setUPAChecked;
> *putGroupElemDecl = *XML::Xercesc::SchemaGrammar_putGroupElemDecl;
> 
>  
> > jas.
> > 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to