The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
/* -*- mode: C++; c-file-style: "bsd" -*- */

#include "pomni.h"
#include "server.h"
#include "exttypes.h"
#undef minor			// AIX defines such strange macros
#undef shutdown			// Win32 defines such strange macros
#undef rewind			// Win32 defines such strange macros

#ifdef HAS_PPPORT_H
#  include "ppport.h"
#endif

/* FIXME: Boot check screws up with egcs... */
#undef XS_VERSION_BOOTCHECK
#define XS_VERSION_BOOTCHECK

typedef CORBA::Object_ptr   CORBA__Object;
typedef CORBA::ORB_ptr      CORBA__ORB;
typedef CORBA::TypeCode_ptr CORBA__TypeCode;
#ifdef HAS_LongLong
typedef CORBA::LongLong     CORBA__LongLong;
typedef CORBA::ULongLong    CORBA__ULongLong;
#endif
#ifdef HAS_LongDouble
typedef CORBA::LongDouble   CORBA__LongDouble;
#endif
typedef CORBA::Object_ptr		PortableServer__POA;
typedef CORBA::Object_ptr		PortableServer__POAManager;
typedef CORBA::Object_ptr		PortableServer__Current;
typedef PortableServer::ObjectId_var	PortableServer__ObjectId;
typedef PortableServer::Servant		PortableServer__ServantBase;
typedef CORBA::Object_ptr		DynamicAny__DynAny;
typedef CORBA::Object_ptr		DynamicAny__DynFixed;
typedef CORBA::Object_ptr		DynamicAny__DynEnum;
typedef CORBA::Object_ptr		DynamicAny__DynStruct;
typedef CORBA::Object_ptr		DynamicAny__DynUnion;
typedef CORBA::Object_ptr		DynamicAny__DynSequence;
typedef CORBA::Object_ptr		DynamicAny__DynArray;
#if 0
typedef CORBA::Object_ptr		DynamicAny__DynValue;
#endif
typedef CORBA::Object_ptr		DynamicAny__DynAnyFactory;

CORBA::ORB_ptr pomni_orb = CORBA::ORB::_nil();

// Private per-interpreter context, containing the interpreter entry lock
#define MY_CXT_KEY "CORBA::omniORB::_guts" XS_VERSION
typedef struct {
    POmniRatchetLock *entry_lock;
} my_cxt_t;

START_MY_CXT

// Instantiate an entry lock for the initial Perl interpreter
static void
pomni_init_entry_lock(pTHX)
{
    MY_CXT_INIT;
    MY_CXT.entry_lock = new POmniRatchetLock;

    // Create an un-anchored blessed reference to the entry lock
    // so that it can be destroyed when the Perl interpreter is.
    SV *rv = newSV(0);
    (void) sv_setref_iv(rv, "CORBA::omniORB::EntryLock",
			PTR2IV((void *) MY_CXT.entry_lock));
}

// Instantiate an entry lock for a cloned Perl interpreter
static void
pomni_clone_entry_lock(pTHX)
{
    MY_CXT_CLONE;
    MY_CXT.entry_lock = new POmniRatchetLock;

    // Create an un-anchored blessed reference to the entry lock
    // so that it can be destroyed when the Perl interpreter is.
    SV *rv = newSV(0);
    (void) sv_setref_iv(rv, "CORBA::omniORB::EntryLock",
			PTR2IV((void *) MY_CXT.entry_lock));
}

// Return a pointer to the entry lock of the current Perl interpreter
POmniRatchetLock *
pomni_entry_lock(pTHX)
{
    if (PL_dirty)
	return 0;
    
    dMY_CXT;
    return MY_CXT.entry_lock;
}

static UV
pomni_unlock(pTHX)
{
    if (PL_dirty)
	return 0;

    dMY_CXT;
    return MY_CXT.entry_lock->release();
}

static void
pomni_relock(pTHX_ UV token)
{
    if (PL_dirty)
	return;

    dMY_CXT;
    MY_CXT.entry_lock->resume(token);
}

// Clone the CORBA::ORB object reference.
static void
pomni_clone_orb(pTHX)
{
    SV *weakref = get_sv("CORBA::omniORB::_the_orb", FALSE);
    if (weakref && SvROK(weakref)) {
	SV *iv = SvRV(weakref);
	CORBA::ORB_ptr orb = (CORBA::ORB_ptr) INT2PTR(void *, SvIV(iv));
	sv_setiv(iv, PTR2IV((void *) CORBA::ORB::_duplicate(orb)));
    }
}

CORBA::Policy_ptr
make_policy (PortableServer::POA *poa, char *key, char *value)
{
  switch (key[0])
    {
    case 'i':
      if (!strcmp(key, "id_uniqueness"))
	{
	  if (!strcmp (value, "UNIQUE_ID"))
	    return poa->create_id_uniqueness_policy (PortableServer::UNIQUE_ID);
	  else if (!strcmp (value, "MULTIPLE_ID"))
	    return poa->create_id_uniqueness_policy (PortableServer::MULTIPLE_ID);
	  else
	    croak ("IdUniquenessPolicy should be \"UNIQUE_ID\" or \"MULTIPLE_ID\"");
	}
      else if (!strcmp(key, "id_assignment"))
	{
	  if (!strcmp (value, "USER_ID"))
	    return poa->create_id_assignment_policy (PortableServer::USER_ID);
	  else if (!strcmp (value, "SYSTEM_ID"))
	    return poa->create_id_assignment_policy (PortableServer::SYSTEM_ID);
	  else
	    croak ("IdAssignmentPolicy should be \"USER_ID\" or \"SYSTEM_ID\"");
	}
      else if (!strcmp(key, "implicit_activation"))
	{
	  if (!strcmp (value, "IMPLICIT_ACTIVATION"))
	    return poa->create_implicit_activation_policy (PortableServer::IMPLICIT_ACTIVATION);
	  else if (!strcmp (value, "NO_IMPLICIT_ACTIVATION"))
	    return poa->create_implicit_activation_policy (PortableServer::NO_IMPLICIT_ACTIVATION);
	  else
	    croak ("ImplicitActivationPolicy should be \"IMPLICIT_ACTIVATION\" or \"SYSTEM_ID\"");
	}
    case 'l':
      if (!strcmp(key, "lifespan"))
	{
	  if (!strcmp (value, "TRANSIENT"))
	    return poa->create_lifespan_policy (PortableServer::TRANSIENT);
	  else if (!strcmp (value, "PERSISTENT"))
	    return poa->create_lifespan_policy (PortableServer::PERSISTENT);
	  else
	    croak ("LifespanPolicy should be \"TRANSIENT\" or \"PERSISTENT\"");
	}
    case 'r':
      if (!strcmp(key, "request_processing"))
	{
	  if (!strcmp (value, "USE_ACTIVE_OBJECT_MAP_ONLY"))
	    return poa->create_request_processing_policy (PortableServer::USE_ACTIVE_OBJECT_MAP_ONLY);
	  else if (!strcmp (value, "USE_DEFAULT_SERVANT"))
	    return poa->create_request_processing_policy (PortableServer::USE_DEFAULT_SERVANT);
	  else if (!strcmp (value, "USE_SERVANT_MANAGER"))
	    return poa->create_request_processing_policy (PortableServer::USE_SERVANT_MANAGER);
	  else
	    croak ("RequestProcessingPolicy should be \"USE_ACTIVE_OBJECT_MAP_ONLY\", \"USE_DEFAULT_SERVANT\", or \"USE_SERVANT_MANAGER\"");
	}
    case 's':
      if (!strcmp(key, "servant_retention"))
	{
	  if (!strcmp (value, "RETAIN"))
	    return poa->create_servant_retention_policy (PortableServer::RETAIN);
	  else if (!strcmp (value, "NON_RETAIN"))
	    return poa->create_servant_retention_policy (PortableServer::NON_RETAIN);
	  else
	    croak ("ServantRetentionPolicy should be \"RETAIN\" or \"NON_RETAIN\"");
	}
      break;
    case 't':
      if (!strcmp(key, "thread"))
	{
	  if (!strcmp (value, "ORB_CTRL_MODEL"))
	    return poa->create_thread_policy (PortableServer::ORB_CTRL_MODEL);
	  else if (!strcmp (value, "SINGLE_THREAD_MODEL"))
	    return poa->create_thread_policy (PortableServer::SINGLE_THREAD_MODEL);
	  else if (!strcmp (value, "MAIN_THREAD_MODEL"))
	    return poa->create_thread_policy (PortableServer::MAIN_THREAD_MODEL);
	  else
	    croak ("ThreadPolicyValue should be \"ORB_CTRL_MODEL\", \"SINGLE_THREAD_MODEL\", or \"MAIN_THREAD_MODEL\"");
	}
      break;
    }
  croak("Policy key should be one of \"id_uniqueness\", \"id_assignment\",  \"implicit_activation\",  \"lifespan\",  \"request_processing\",  \"servant_retention\" or \"thread\"");
}

MODULE = CORBA::omniORB           PACKAGE = CORBA::omniORB

PROTOTYPES: DISABLE

BOOT:
    pomni_init_entry_lock(aTHX);
    pomni_init_exceptions(aTHX);
    pomni_init_typecodes(aTHX);

void
CLONE(...)
    CODE:
    pomni_clone_entry_lock(aTHX);
    pomni_clone_orb(aTHX);
    pomni_clone_pins(aTHX);
    pomni_clone_typecodes(aTHX);
    
char *
find_interface (repoid)
    char *repoid
    CODE:
    {
	CM_DEBUG(("find_interface %s\n", repoid));
	POmniIfaceInfo *info = pomni_find_interface_description (aTHX_ repoid);
	RETVAL = info ? (char *)info->pkg.c_str() : NULL;
    }
    OUTPUT:
    RETVAL

void
clear_interface (repoid)
    char *repoid
    CODE:
    {
#ifdef MEMCHECK
	pomni_clear_interface(aTHX_ repoid);
#endif
    }

char *
load_interface (interface)
    CORBA::Object interface
    CODE:
    {
	CORBA::InterfaceDef_var iface
	    = CORBA::InterfaceDef::_narrow (interface);
	POmniIfaceInfo *info
	    = pomni_load_contained (aTHX_ iface, CORBA::ORB::_nil(), NULL);
	RETVAL = info ? (char *)info->pkg.c_str() : NULL;
    }
    OUTPUT:
    RETVAL

void
_entry_lock_hooks ()
    PPCODE:
    EXTEND(SP, 2);
    PUSHs(sv_2mortal(newSVuv(PTR2UV(pomni_unlock))));
    PUSHs(sv_2mortal(newSVuv(PTR2UV(pomni_relock))));


MODULE = CORBA::omniORB           PACKAGE = CORBA

SV *
ORB_init (id)
    char *id
    CODE:
    {
	SV *weakref = get_sv("CORBA::omniORB::_the_orb", TRUE);
	if (SvROK(weakref)) {
	    RETVAL = newSV(0);
	    sv_setsv(RETVAL, weakref);
	}
	else {
	    if (CORBA::is_nil(pomni_orb)) {
		int i;
		AV *ARGV = get_av("ARGV", FALSE);
		SV *ARGV0 = get_sv("0", FALSE);
		
		AV *ARGV_copy = newAV();
		sv_2mortal((SV*)ARGV_copy);
		for (i = 0; i <= av_len(ARGV); i++)
		    av_store(ARGV_copy, i, newSVsv(*av_fetch(ARGV, i, 0)));
		
		int argc = av_len(ARGV_copy) + 2;
		char **argv = (char **) malloc (sizeof(char *) * argc);
		argv[0] = SvPV (ARGV0, PL_na);
		for (i = 0; i <= av_len(ARGV_copy); i++ )
		    argv[i+1] = SvPV( *av_fetch(ARGV_copy, i, 0), PL_na );
		
		try {
		    pomni_orb = CORBA::ORB_init (argc, argv, id);
		} catch (CORBA::SystemException &ex) {
		    if (argv)
			free (argv);
		    pomni_throw (aTHX_
				 pomni_system_except (aTHX_
						      ex._rep_id(),
						      ex.minor(),
						      ex.completed()));
		}
	    
		av_clear (ARGV);
	    
		for (i = 1; i < argc; i++)
		    av_store (ARGV, i - 1, newSVpv(argv[i], 0));
	
		if (argv)
		    free (argv);
	    }

	    RETVAL = newSV(0);
	    sv_setref_pv(RETVAL, "CORBA::ORB",
			 (void *) CORBA::ORB::_duplicate(pomni_orb));

	    sv_setsv(weakref, RETVAL);
	    sv_rvweaken(weakref);
	}
    }
    OUTPUT:
    RETVAL

bool
is_nil (self)
    CORBA::Object self;
    CODE:
    RETVAL = CORBA::is_nil (self);
    OUTPUT:
    RETVAL

MODULE = CORBA::omniORB		PACKAGE = CORBA::Any

SV *
new (pkg, type, value)
    CORBA::TypeCode type
    SV *value
    CODE:
    CORBA::Any any(type, 0);
    if (!pomni_to_any (aTHX_ &any, value)) {
	croak("Error constructing Any");
    }
    RETVAL = pomni_any_to_sv(aTHX_ any);
    OUTPUT:
    RETVAL

SV *
value (self)
    SV *self
    CODE:
    CORBA::Any any;
    pomni_any_from_sv(aTHX_ &any, self);
    RETVAL = pomni_from_any (aTHX_ &any);
    OUTPUT:
    RETVAL

CORBA::TypeCode
type (self)
    SV *self
    CODE:
    CORBA::Any any;
    pomni_any_from_sv(aTHX_ &any, self);
    RETVAL = any.type();
    OUTPUT:
    RETVAL    

MODULE = CORBA::omniORB		PACKAGE = CORBA::ORB

char *
object_to_string (self, obj)
    CORBA::ORB self
    CORBA::Object obj
    CODE:
    CORBA::String_var string = self->object_to_string (obj);
    RETVAL = (char *) string;
    OUTPUT:
    RETVAL

AV *
list_initial_services( self )
    CORBA::ORB self;
    CODE:
    CORBA::ORB::ObjectIdList_var ids = self->list_initial_services();
    RETVAL = newAV();
    av_extend(RETVAL, ids->length());
    for( CORBA::ULong i = 0; i < ids->length(); i++ ) {
      av_push( RETVAL, newSVpv(ids[i], 0) );
    }
    OUTPUT:
      RETVAL

SV *
resolve_initial_references (self, id)
    CORBA::ORB self;
    char *     id
    CODE:
    {
 	CORBA::Object *obj = CORBA::Object::_nil();
	try {
	  obj = self->resolve_initial_references (id);
	}
        CATCH_POMNI_SYSTEMEXCEPTION
	catch (CORBA::ORB::InvalidName &ex) {
	    pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
	}
	if( strcmp( id, "DynAnyFactory" ) == 0 ) {
	    RETVAL = pomni_local_objref_to_sv(aTHX_ obj,
					      "DynamicAny::DynAnyFactory");
	} else {
	  // ugly hack
	  PortableServer::POA_ptr poa = PortableServer::POA::_narrow (obj);
	  if (!CORBA::is_nil (poa)) {
              CORBA::release(poa);
	      RETVAL = pomni_local_objref_to_sv(aTHX_ obj,
						"PortableServer::POA");
	  } else {
	      PortableServer::Current_ptr current
		  = PortableServer::Current::_narrow (obj);
	      if (!CORBA::is_nil (current)) {
                  CORBA::release(current);
		  RETVAL = pomni_local_objref_to_sv(aTHX_ obj,
						    "PortableServer::Current");
	      } else
		  RETVAL = pomni_objref_to_sv (aTHX_ obj);
	  }
	}
    }
    OUTPUT:
    RETVAL

CORBA::Object
string_to_object (self, str)
    CORBA::ORB self;
    char *     str;
    CODE:
    try {
        RETVAL = self->string_to_object (str);
    }
    CATCH_POMNI_SYSTEMEXCEPTION
    OUTPUT:
    RETVAL

SV *
cdr_encode (self, val, tc)
    CORBA::ORB self;
    SV *val;
    CORBA::TypeCode tc;
    CODE:
    {
	CORBA::Any a(tc, 0);
	if(pomni_to_any(aTHX_ &a, val)) {
	    cdrMemoryStream s;
	    a.NP_marshalDataOnly(s);
	    RETVAL = newSVpvn((char *) s.bufPtr(), s.bufSize());
	}
	else {
	    croak("Error encoding value");
	}
    }
    OUTPUT:
    RETVAL

SV *
cdr_decode (self, cdr, tc)
    CORBA::ORB self;
    SV *cdr;
    CORBA::TypeCode tc;
    CODE:
    {
	STRLEN len;
	char *buf = SvPV(cdr, len);
	cdrMemoryStream s;
	s.put_octet_array((CORBA::Octet *) buf, len);
	CORBA::Any a(tc, 0);
	a.NP_unmarshalDataOnly(s);
	RETVAL = pomni_from_any(aTHX_ &a);
    }
    OUTPUT:
    RETVAL

bool
preload (self, id)
    CORBA::ORB self;
    char *     id
    CODE:
    RETVAL = (pomni_load_contained (aTHX_ CORBA::Contained::_nil(), self, id) != 0);
    OUTPUT:
    RETVAL

void
_define_interface (self, name, cdr)
    CORBA::ORB self;
    char *     name;
    SV *       cdr;
    CODE:
    STRLEN len;
    char *buf = SvPV(cdr, len);
    cdrMemoryStream s;
    s.put_octet_array((CORBA::Octet *) buf, len);
    CORBA::InterfaceDef::FullInterfaceDescription *desc
        = new CORBA::InterfaceDef::FullInterfaceDescription();
    *desc <<= s;
    pomni_define_interface(aTHX_ name, desc);

void
_define_exception (self, name, id)
    CORBA::ORB self;
    char *     name;
    char *     id;
    CODE:
    pomni_define_exception(aTHX_ name, id);

void 
run (self)
    CORBA::ORB self;
    CODE:
    PUTBACK;
    {
	POmniPerlEntryUnlocker ul(aTHX);
	self->run();
    }
    SPAGAIN;

void
shutdown (self, wait_for_completion)
    CORBA::ORB self;
    SV *wait_for_completion;
    CODE:
    self->shutdown (SvTRUE (wait_for_completion));

void
perform_work (self)
    CORBA::ORB self;
    CODE:
    PUTBACK;
    {
	POmniPerlEntryUnlocker ul(aTHX);
	self->perform_work ();
    }
    SPAGAIN;

int
work_pending (self)
    CORBA::ORB self;
    CODE:
    PUTBACK;
    {
	POmniPerlEntryUnlocker ul(aTHX);
	RETVAL = self->work_pending ();
    }
    SPAGAIN;
    OUTPUT:
    RETVAL

void
destroy (self)
    CORBA::ORB self
    CODE:
    PUTBACK;
    {
	POmniPerlEntryUnlocker ul(aTHX);
	self->destroy();
    }
    SPAGAIN;
#ifdef MEMCHECK
    pomni_clear_servants(aTHX);
    pomni_clear_pins(aTHX);
    pomni_clear_typecodes(aTHX);
    pomni_clear_exceptions(aTHX);
    pomni_clear_iface_repository(aTHX);
#endif

    CORBA::release(pomni_orb);
    pomni_orb = CORBA::ORB::_nil();

CORBA::TypeCode
create_alias_tc (self, id, name, original_type)
    CORBA::ORB self
    const char *id
    const char *name
    CORBA::TypeCode original_type
    CODE:
    RETVAL = self->create_alias_tc(id, name, original_type);
    OUTPUT:
    RETVAL
    
CORBA::TypeCode
create_interface_tc (self, id, name)
    CORBA::ORB self
    const char *id
    const char *name
    CODE:
    RETVAL = self->create_interface_tc(id, name);
    OUTPUT:
    RETVAL

CORBA::TypeCode
create_string_tc (self, bound)
    CORBA::ORB self
    unsigned long bound
    CODE:
    RETVAL = self->create_string_tc(bound);
    OUTPUT:
    RETVAL


CORBA::TypeCode
create_fixed_tc (self, digits, scale)
    CORBA::ORB self
    unsigned short digits
    short scale
    CODE:
    RETVAL = self->create_fixed_tc(digits, scale);
    OUTPUT:
    RETVAL

CORBA::TypeCode
create_sequence_tc (self, bound, element_type)
    CORBA::ORB self
    unsigned long bound
    CORBA::TypeCode element_type
    CODE:
    RETVAL = self->create_sequence_tc(bound, element_type);
    OUTPUT:
    RETVAL

CORBA::TypeCode
create_array_tc (self, length, element_type)
    CORBA::ORB self
    unsigned long length
    CORBA::TypeCode element_type
    CODE:
    RETVAL = self->create_array_tc(length, element_type);
    OUTPUT:
    RETVAL

CORBA::TypeCode
create_recursive_tc (self, id)
    CORBA::ORB self
    const char *id
    CODE:
    RETVAL = self->create_recursive_tc(id);
    OUTPUT:
    RETVAL

void
DESTROY (self)
    CORBA::ORB self
    CODE:
    CORBA::release (self);

MODULE = CORBA::omniORB		PACKAGE = CORBA::Object

CORBA::Object
_get_interface (self)
    CORBA::Object self;
    CODE:
    try {
        RETVAL = self->_get_interface();
    }
    CATCH_POMNI_SYSTEMEXCEPTION
    OUTPUT:
    RETVAL

int
_non_existent (self)
    CORBA::Object self;
    CODE:
    try {
        RETVAL = self->_non_existent();
    }
    CATCH_POMNI_SYSTEMEXCEPTION
    OUTPUT:
    RETVAL

int
_is_a (self, repoId)
    CORBA::Object self;
    char * repoId;
    CODE:
    try {
        RETVAL = self->_is_a(repoId);
    }
    CATCH_POMNI_SYSTEMEXCEPTION
    OUTPUT:
    RETVAL

int
_is_equivalent (self, obj)
    CORBA::Object self;
    CORBA::Object obj;
    CODE:
    try {
        RETVAL = self->_is_equivalent((CORBA::Object_ptr)obj);
    }
    CATCH_POMNI_SYSTEMEXCEPTION
    OUTPUT:
    RETVAL

unsigned long
_hash (self, maximum)
    CORBA::Object self;
    unsigned long maximum;
    CODE:
    try {
        RETVAL = self->_hash(maximum);
    }
    CATCH_POMNI_SYSTEMEXCEPTION
    OUTPUT:
    RETVAL

char *
_repoid (self)
    CORBA::Object self;
    CODE:
    {
	const char *repoid = CORBA::Object::_PD_repoId;
	if (!CORBA::is_nil(self))
	    repoid = self->_PR_getobj()->_mostDerivedRepoId();
	RETVAL = (char *)repoid;
    }
    OUTPUT:
    RETVAL

CORBA::Object
_self (self)
    CORBA::Object self
    CODE:
    RETVAL = self;
    OUTPUT:
    RETVAL

void
DESTROY (self)
    CORBA::Object self
    CODE:
    pomni_objref_destroy (aTHX_ self);
    CORBA::release (self);

MODULE = CORBA::omniORB		PACKAGE = CORBA::TypeCode

SV *
new (pkg, id)
    char *id
    CODE:
    RETVAL = pomni_lookup_typecode (aTHX_ id);
    if (RETVAL == NULL)
        croak("Cannot find typecode for '%s'", id);
    OUTPUT:
    RETVAL

char *
kind (self)
    CORBA::TypeCode self
    CODE:
    RETVAL = (char*)TCKind_to_str( self->kind () );
    OUTPUT:
    RETVAL

bool
equal (self, tc)
    CORBA::TypeCode self
    CORBA::TypeCode tc
    CODE:
    RETVAL = self->equal (tc);
    OUTPUT:
    RETVAL

bool 
equivalent (self, tc)
    CORBA::TypeCode self
    CORBA::TypeCode tc
    CODE:
    RETVAL = self->equivalent (tc);
    OUTPUT:
    RETVAL

CORBA::TypeCode
get_compact_typecode (self)
    CORBA::TypeCode self
    CODE:
    RETVAL = self->get_compact_typecode ();
    OUTPUT:
    RETVAL

char *
id (self)
    CORBA::TypeCode self
    CODE:
    try {
	RETVAL = (char *)self->id ();
    } catch (CORBA::TypeCode::BadKind &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL
    
char *
name (self)
    CORBA::TypeCode self
    CODE:
    try {
	RETVAL = (char *)self->name ();
    } catch (CORBA::TypeCode::BadKind &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL
    
unsigned long
member_count (self)
    CORBA::TypeCode self
    CODE:
    try {
	RETVAL = self->member_count ();
    } catch (CORBA::TypeCode::BadKind &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL
    
char *
member_name (self, index)
    CORBA::TypeCode self
    unsigned long index
    CODE:
    try {
	RETVAL = (char *)self->member_name (index);
    } catch (CORBA::TypeCode::BadKind &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (CORBA::TypeCode::Bounds &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL
    
CORBA::TypeCode
member_type (self, index)
    CORBA::TypeCode self
    unsigned long index
    CODE:
    try {
	RETVAL = self->member_type (index);
    } catch (CORBA::TypeCode::BadKind &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (CORBA::TypeCode::Bounds &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL
    
SV *
member_label (self, index)
    CORBA::TypeCode self
    unsigned long index
    CODE:
    try {
	CORBA::Any_var label = self->member_label (index);
	RETVAL = pomni_any_to_sv(aTHX_ label);
    } catch (CORBA::TypeCode::BadKind &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (CORBA::TypeCode::Bounds &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL

CORBA::TypeCode
discriminator_type (self)
    CORBA::TypeCode self
    CODE:
    try {
	RETVAL = self->discriminator_type ();
    } catch (CORBA::TypeCode::BadKind &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL

long
default_index (self)
    CORBA::TypeCode self
    CODE:
    try {
	RETVAL = self->default_index ();
    } catch (CORBA::TypeCode::BadKind &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL
    
unsigned long
length (self)
    CORBA::TypeCode self
    CODE:
    try {
	RETVAL = self->length ();
    } catch (CORBA::TypeCode::BadKind &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL

CORBA::TypeCode
content_type (self)
    CORBA::TypeCode self
    CODE:
    try {
	RETVAL = self->content_type ();
    } catch (CORBA::TypeCode::BadKind &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL

int
fixed_digits (self)
    CORBA::TypeCode self
    CODE:
    try {
	RETVAL = self->fixed_digits ();
    } catch (CORBA::TypeCode::BadKind &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL
    
int
fixed_scale (self)
    CORBA::TypeCode self
    CODE:
    try {
	RETVAL = self->fixed_scale ();
    } catch (CORBA::TypeCode::BadKind &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL
    
void
DESTROY (self)
    CORBA::TypeCode self
    CODE:
    CORBA::release (self);

MODULE = CORBA::omniORB            PACKAGE = CORBA::LongLong

#ifdef HAS_LongLong

CORBA::LongLong
new (Class, str)
    char *str
    CODE:
    RETVAL = longlong_from_string (str);
    OUTPUT:
    RETVAL

SV *
stringify (self, other=0, reverse=&PL_sv_undef)
    CORBA::LongLong self
    CODE:
    {
	char *result = longlong_to_string (self);
        RETVAL = newSVpv (result, 0);
	Safefree (result);
    }
    OUTPUT:
    RETVAL

CORBA::LongLong
add (self, other, reverse=&PL_sv_undef)
    CORBA::LongLong self
    CORBA::LongLong other
    CODE:
    RETVAL = self+other;
    OUTPUT:
    RETVAL

CORBA::LongLong
subtract (self, other, reverse=&PL_sv_undef)
    CORBA::LongLong self
    CORBA::LongLong other
    SV *reverse
    CODE:
    if (SvTRUE (reverse))
        RETVAL = other - self;
    else
        RETVAL = self - other;
    OUTPUT:
    RETVAL

CORBA::LongLong
div (self, other, reverse=&PL_sv_undef)
    CORBA::LongLong self
    CORBA::LongLong other
    SV *reverse
    CODE:
    if (SvTRUE (reverse))
        RETVAL = other / self;
    else
        RETVAL = self / other;
    OUTPUT:
    RETVAL

CORBA::LongLong
mul (self, other, reverse=&PL_sv_undef)
    CORBA::LongLong self
    CORBA::LongLong other
    CODE:
    RETVAL = self*other;
    OUTPUT:
    RETVAL

CORBA::LongLong
mod (self, other, reverse=&PL_sv_undef)
    CORBA::LongLong self
    CORBA::LongLong other
    SV *reverse
    CODE:
    if (SvTRUE (reverse))
        RETVAL = other % self;
    else
        RETVAL = self % other;
    OUTPUT:
    RETVAL

CORBA::LongLong
neg (self, other=0, reverse=&PL_sv_undef)
    CORBA::LongLong self
    CODE:
    RETVAL = -self;
    OUTPUT:
    RETVAL

CORBA::LongLong
abs (self, other=0, reverse=&PL_sv_undef)
    CORBA::LongLong self
    CODE:
    RETVAL = (self > 0) ? self : -self;
    OUTPUT:
    RETVAL

int
cmp (self, other, reverse=&PL_sv_undef)
    CORBA::LongLong self
    CORBA::LongLong other
    SV *reverse
    CODE:
    if (SvTRUE (reverse))
      RETVAL = (self == other) ? 0 : ((self > other) ? 1 : -1);
    else
      RETVAL = (other == self) ? 0 : ((other > self) ? 1 : -1);
    OUTPUT:
    RETVAL

#endif
	
MODULE = CORBA::omniORB            PACKAGE = CORBA::ULongLong

#ifdef HAS_LongLong

CORBA::ULongLong
new (Class, str)
    char *str
    CODE:
    RETVAL = ulonglong_from_string (str);
    OUTPUT:
    RETVAL

SV *
stringify (self, other=0, reverse=&PL_sv_undef)
    CORBA::ULongLong self
    CODE:
    {
	char *result = ulonglong_to_string (self);
        RETVAL = newSVpv (result, 0);
	Safefree (result);
    }
    OUTPUT:
    RETVAL

CORBA::ULongLong
add (self, other, reverse=&PL_sv_undef)
    CORBA::ULongLong self
    CORBA::ULongLong other
    CODE:
    RETVAL = self+other;
    OUTPUT:
    RETVAL

CORBA::ULongLong
subtract (self, other, reverse=&PL_sv_undef)
    CORBA::ULongLong self
    CORBA::ULongLong other
    SV *reverse
    CODE:
    if (SvTRUE (reverse))
        RETVAL = other - self;
    else
        RETVAL = self - other;
    OUTPUT:
    RETVAL

CORBA::ULongLong
div (self, other, reverse=&PL_sv_undef)
    CORBA::ULongLong self
    CORBA::ULongLong other
    SV *reverse
    CODE:
    if (SvTRUE (reverse))
        RETVAL = other / self;
    else
        RETVAL = self / other;
    OUTPUT:
    RETVAL

CORBA::ULongLong
mul (self, other, reverse=&PL_sv_undef)
    CORBA::ULongLong self
    CORBA::ULongLong other
    CODE:
    RETVAL = self*other;
    OUTPUT:
    RETVAL

CORBA::ULongLong
mod (self, other, reverse=&PL_sv_undef)
    CORBA::ULongLong self
    CORBA::ULongLong other
    SV *reverse
    CODE:
    if (SvTRUE (reverse))
        RETVAL = other % self;
    else
        RETVAL = self % other;
    OUTPUT:
    RETVAL

int
cmp (self, other, reverse=&PL_sv_undef)
    CORBA::ULongLong self
    CORBA::ULongLong other
    SV *reverse
    CODE:
    if (SvTRUE (reverse))
      RETVAL = (self == other) ? 0 : ((self > other) ? 1 : -1);
    else
      RETVAL = (other == self) ? 0 : ((other > self) ? 1 : -1);
    OUTPUT:
    RETVAL

#endif
	
MODULE = CORBA::omniORB            PACKAGE = CORBA::LongDouble

#ifdef HAS_LongDouble

CORBA::LongDouble
new (Class, str)
    char *str
    CODE:
    RETVAL = longdouble_from_string (str);
    OUTPUT:
    RETVAL

SV *
stringify (self, other=0, reverse=&PL_sv_undef)
    CORBA::LongDouble self
    CODE:
    {
	char *result = longdouble_to_string (self);
        RETVAL = newSVpv (result, 0);
	Safefree (result);
    }
    OUTPUT:
    RETVAL

CORBA::LongDouble
add (self, other, reverse=&PL_sv_undef)
    CORBA::LongDouble self
    CORBA::LongDouble other
    CODE:
    RETVAL = self+other;
    OUTPUT:
    RETVAL

CORBA::LongDouble
subtract (self, other, reverse=&PL_sv_undef)
    CORBA::LongDouble self
    CORBA::LongDouble other
    SV *reverse
    CODE:
    if (SvTRUE (reverse))
        RETVAL = other - self;
    else
        RETVAL = self - other;
    OUTPUT:
    RETVAL

CORBA::LongDouble
div (self, other, reverse=&PL_sv_undef)
    CORBA::LongDouble self
    CORBA::LongDouble other
    SV *reverse
    CODE:
    if (SvTRUE (reverse))
        RETVAL = other / self;
    else
        RETVAL = self / other;
    OUTPUT:
    RETVAL

CORBA::LongDouble
mul (self, other, reverse=&PL_sv_undef)
    CORBA::LongDouble self
    CORBA::LongDouble other
    CODE:
    RETVAL = self*other;
    OUTPUT:
    RETVAL

CORBA::LongDouble
neg (self, other=0, reverse=&PL_sv_undef)
    CORBA::LongDouble self
    CODE:
    RETVAL = -self;
    OUTPUT:
    RETVAL

CORBA::LongDouble
abs (self, other=0, reverse=&PL_sv_undef)
    CORBA::LongDouble self
    CODE:
    RETVAL = (self > 0) ? self : -self;
    OUTPUT:
    RETVAL

int
cmp (self, other, reverse=&PL_sv_undef)
    CORBA::LongDouble self
    CORBA::LongDouble other
    SV *reverse
    CODE:
    if (SvTRUE (reverse))
      RETVAL = (self == other) ? 0 : ((self > other) ? 1 : -1);
    else
      RETVAL = (other == self) ? 0 : ((other > self) ? 1 : -1);
    OUTPUT:
    RETVAL

#endif
	
MODULE = CORBA::omniORB            PACKAGE = PortableServer::POA

char *
_get_the_name (self)
    PortableServer::POA self
    CODE:
    PortableServer::POA_var THIS = PortableServer::POA::_narrow(self);
    RETVAL = (char *)THIS->the_name();
    OUTPUT:
    RETVAL

PortableServer::POA
_get_the_parent (self)
    PortableServer::POA self
    CODE:
    PortableServer::POA_var THIS = PortableServer::POA::_narrow(self);
    RETVAL = THIS->the_parent();
    OUTPUT:
    RETVAL

PortableServer::POAManager
_get_the_POAManager (self)
    PortableServer::POA self
    CODE:
    PortableServer::POA_var THIS = PortableServer::POA::_narrow(self);
    RETVAL = THIS->the_POAManager();
    OUTPUT:
    RETVAL

CORBA::Object
_get_the_activator (self)
    PortableServer::POA self
    CODE:
    PortableServer::POA_var THIS = PortableServer::POA::_narrow(self);
    RETVAL = THIS->the_activator();
    OUTPUT:
    RETVAL

void
_set_the_activator (self, obj)
    PortableServer::POA self
    CORBA::Object obj
    CODE:
    PortableServer::POA_var THIS = PortableServer::POA::_narrow(self);
    PortableServer::AdapterActivator_var activator = 
        PortableServer::AdapterActivator::_narrow (obj);
    if (!activator)
	croak ("activator must be of type PortableServer::AdapterActivator");
    THIS->the_activator (activator);

PortableServer::POA
create_POA (self, adapter_name, mngr_obj, ...)
    PortableServer::POA self
    char *adapter_name
    CORBA::Object mngr_obj
    CODE:
    PortableServer::POA_var THIS = PortableServer::POA::_narrow(self);
    CORBA::PolicyList_var policies;
    PortableServer::POAManager_var mngr
        = PortableServer::POAManager::_narrow(mngr_obj);
    CORBA::ULong npolicies;
    if (items % 2 != 1)
        croak("PortableServer::POA::create_POA requires an even number of arguments\n");


    npolicies = (items - 3) / 2;
    policies = new CORBA::PolicyList (npolicies);
    policies->length (npolicies);
    for (CORBA::ULong i = 0 ; i < npolicies; i++)
        policies[i] = make_policy (THIS, SvPV(ST(3+i*2), PL_na), 
				   SvPV(ST(4+i*2), PL_na));

    try {
	RETVAL = THIS->create_POA (adapter_name, mngr, policies);
    } catch (PortableServer::POA::AdapterAlreadyExists &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (PortableServer::POA::InvalidPolicy &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }

    OUTPUT:
    RETVAL

void
destroy (self, etherealize_objects, wait_for_completion)
    PortableServer::POA self
    SV *etherealize_objects
    SV *wait_for_completion
    CODE:
    PortableServer::POA_var THIS = PortableServer::POA::_narrow(self);
    THIS->destroy (SvTRUE (etherealize_objects),
		   SvTRUE (wait_for_completion));

CORBA::Object
get_servant_manager (self)
    PortableServer::POA self
    CODE:
    PortableServer::POA_var THIS = PortableServer::POA::_narrow(self);
    try {
        RETVAL = THIS->get_servant_manager ();
    } catch (PortableServer::POA::WrongPolicy &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL

void
set_servant_manager (self, obj)
    PortableServer::POA self
    CORBA::Object obj
    CODE:
    PortableServer::POA_var THIS = PortableServer::POA::_narrow(self);
    PortableServer::ServantManager_var manager
        = PortableServer::ServantManager::_narrow(obj);
    if (CORBA::is_nil (manager))
	croak ("Servant manager must be a PortableServer::ServantManager\n");
    try {
	THIS->set_servant_manager (manager);
    } catch (PortableServer::POA::WrongPolicy &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }

PortableServer::ServantBase
get_servant (self)
    PortableServer::POA self
    CODE:
    PortableServer::POA_var THIS = PortableServer::POA::_narrow(self);
    try {
        RETVAL = THIS->get_servant ();
    } catch (PortableServer::POA::NoServant &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (PortableServer::POA::WrongPolicy &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL

void
set_servant (self, servant)
    PortableServer::POA self
    PortableServer::ServantBase servant
    CODE:
    PortableServer::POA_var THIS = PortableServer::POA::_narrow(self);
    try {
        THIS->set_servant (servant);
    } catch (PortableServer::POA::WrongPolicy &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }

PortableServer::ObjectId
activate_object (self, servant)
    PortableServer::POA self
    PortableServer::ServantBase servant
    CODE:
    PortableServer::POA_var THIS = PortableServer::POA::_narrow(self);
    try {
        RETVAL = THIS->activate_object (servant);
    } catch (PortableServer::POA::ServantAlreadyActive &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (PortableServer::POA::WrongPolicy &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL

void
activate_object_with_id (self, id, servant)
    PortableServer::POA self
    PortableServer::ServantBase servant
    PortableServer::ObjectId id
    CODE:
    PortableServer::POA_var THIS = PortableServer::POA::_narrow(self);
    try {
        THIS->activate_object_with_id (id, servant);
    } catch (PortableServer::POA::ServantAlreadyActive &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (PortableServer::POA::ObjectAlreadyActive &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (PortableServer::POA::WrongPolicy &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }

void
deactivate_object (self, id)
    PortableServer::POA self
    PortableServer::ObjectId id
    CODE:
    PortableServer::POA_var THIS = PortableServer::POA::_narrow(self);
    try {
        THIS->deactivate_object (id);
    } catch (PortableServer::POA::ObjectNotActive &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (PortableServer::POA::WrongPolicy &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }

CORBA::Object
create_reference (self, intf)
    PortableServer::POA self
    char *intf
    CODE:
    PortableServer::POA_var THIS = PortableServer::POA::_narrow(self);
    try {
        RETVAL = THIS->create_reference (intf);
    } catch (PortableServer::POA::WrongPolicy &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL

CORBA::Object
create_reference_with_id (self, oid, intf)
    PortableServer::POA self
    PortableServer::ObjectId oid
    char *intf
    CODE:
    PortableServer::POA_var THIS = PortableServer::POA::_narrow(self);
    try {
        RETVAL = THIS->create_reference_with_id (oid, intf);
    } catch (PortableServer::POA::WrongPolicy &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL

PortableServer::ObjectId
servant_to_id (self, servant)
    PortableServer::POA self
    PortableServer::ServantBase servant
    CODE:
    PortableServer::POA_var THIS = PortableServer::POA::_narrow(self);
    try {
        RETVAL = THIS->servant_to_id (servant);
    } catch (PortableServer::POA::ServantNotActive &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (PortableServer::POA::WrongPolicy &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL

CORBA::Object
servant_to_reference (self, servant)
    PortableServer::POA self
    PortableServer::ServantBase servant
    CODE:
    PortableServer::POA_var THIS = PortableServer::POA::_narrow(self);
    try {
        RETVAL = THIS->servant_to_reference (servant);
    } catch (PortableServer::POA::ServantNotActive &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (PortableServer::POA::WrongPolicy &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL

PortableServer::ServantBase
reference_to_servant (self, reference)
    PortableServer::POA self
    CORBA::Object       reference
    CODE:
    PortableServer::POA_var THIS = PortableServer::POA::_narrow(self);
    try {
        RETVAL = THIS->reference_to_servant (reference);
    } catch (PortableServer::POA::ObjectNotActive &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (PortableServer::POA::WrongAdapter &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (PortableServer::POA::WrongPolicy &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL

PortableServer::ObjectId
reference_to_id (self, reference)
    PortableServer::POA self
    CORBA::Object       reference
    CODE:
    PortableServer::POA_var THIS = PortableServer::POA::_narrow(self);
    try {
        RETVAL = THIS->reference_to_id (reference);
    } catch (PortableServer::POA::WrongAdapter &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (PortableServer::POA::WrongPolicy &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL

PortableServer::ServantBase
id_to_servant (self, id)
    PortableServer::POA self
    PortableServer::ObjectId id
    CODE:
    PortableServer::POA_var THIS = PortableServer::POA::_narrow(self);
    try {
        RETVAL = THIS->id_to_servant (id);
    } catch (PortableServer::POA::ObjectNotActive &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (PortableServer::POA::WrongPolicy &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL

CORBA::Object
id_to_reference (self, id)
    PortableServer::POA self
    PortableServer::ObjectId id
    CODE:
    PortableServer::POA_var THIS = PortableServer::POA::_narrow(self);
    try {
        RETVAL = THIS->id_to_reference (id);
    } catch (PortableServer::POA::ObjectNotActive &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (PortableServer::POA::WrongPolicy &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL

void
DESTROY (self)
    PortableServer::POA self
    CODE:
    pomni_objref_destroy (aTHX_ self);
    CORBA::release (self);

MODULE = CORBA::omniORB            PACKAGE = PortableServer::POAManager

void
activate (self)
    PortableServer::POAManager self
    CODE:
    PortableServer::POAManager_var THIS
        = PortableServer::POAManager::_narrow(self);
    try {
        THIS->activate ();
    } catch (PortableServer::POAManager::AdapterInactive &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }

void
hold_requests (self, wait_for_completion)
    PortableServer::POAManager self
    SV *wait_for_completion
    CODE:
    PortableServer::POAManager_var THIS
        = PortableServer::POAManager::_narrow(self);
    try {
	THIS->hold_requests (SvTRUE (wait_for_completion));
    } catch (PortableServer::POAManager::AdapterInactive &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }

void
discard_requests (self, wait_for_completion)
    PortableServer::POAManager self
    SV *wait_for_completion
    CODE:
    PortableServer::POAManager_var THIS
        = PortableServer::POAManager::_narrow(self);
    try {
	THIS->discard_requests (SvTRUE (wait_for_completion));
    } catch (PortableServer::POAManager::AdapterInactive &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }

void
deactivate (self, etherealize_objects, wait_for_completion)
    PortableServer::POAManager self
    SV *etherealize_objects
    SV *wait_for_completion
    CODE:
    PortableServer::POAManager_var THIS
        = PortableServer::POAManager::_narrow(self);
    try {
	THIS->deactivate (SvTRUE (etherealize_objects),
			  SvTRUE (wait_for_completion));
    } catch (PortableServer::POAManager::AdapterInactive &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }

char *
get_state (self)
    PortableServer::POAManager self
    CODE:
    PortableServer::POAManager_var THIS
        = PortableServer::POAManager::_narrow(self);
    PortableServer::POAManager::State state;
    state = THIS->get_state();
    switch (state) {
    case PortableServer::POAManager::HOLDING:
	RETVAL = "HOLDING";
	break;
	
    case PortableServer::POAManager::ACTIVE:
	RETVAL = "ACTIVE";
	break;
	
    case PortableServer::POAManager::DISCARDING:
	RETVAL = "DISCARDING";
	break;
	
    case PortableServer::POAManager::INACTIVE:
    default: // compiler complains otherwise
	RETVAL = "INACTIVE";
	break;
    }
    OUTPUT:
    RETVAL

void
DESTROY (self)
    PortableServer::POAManager self
    CODE:
    pomni_objref_destroy (aTHX_ self);
    CORBA::release (self);

MODULE = CORBA::omniORB            PACKAGE = PortableServer::Current

PortableServer::POA
get_POA (self)
    PortableServer::Current self
    CODE:
    PortableServer::Current_var THIS = PortableServer::Current::_narrow(self);
    try {
	RETVAL = THIS->get_POA ();
    } catch (PortableServer::Current::NoContext &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL
    
    
PortableServer::ObjectId
get_object_id (self)
    PortableServer::Current self
    CODE:
    PortableServer::Current_var THIS = PortableServer::Current::_narrow(self);
    try {
	RETVAL = THIS->get_object_id ();
    } catch (PortableServer::Current::NoContext &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL
    
CORBA::Object
get_reference (self)
    PortableServer::Current self
    CODE:
    PortableServer::Current_var THIS = PortableServer::Current::_narrow(self);
    try {
	RETVAL = THIS->get_reference ();
    } catch (PortableServer::Current::NoContext &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL
    
void
DESTROY (self)
    PortableServer::Current self
    CODE:
    pomni_objref_destroy (aTHX_ self);
    CORBA::release (self);


MODULE = CORBA::omniORB            PACKAGE = PortableServer::ServantBase

IV
_pomni_servant (self)
    SV *self
    CODE:
    PortableServer::Servant res = new POmniServant (self);
    RETVAL = PTR2IV(res);
    OUTPUT:
    RETVAL

MODULE = CORBA::omniORB            PACKAGE = POA_PortableServer::AdapterActivator

IV
_pomni_servant (self)
    SV *self
    CODE:
    PortableServer::Servant res = new POmniAdapterActivator (self);
    RETVAL = PTR2IV(res);
    OUTPUT:
    RETVAL

MODULE = CORBA::omniORB            PACKAGE = POA_PortableServer::ServantActivator

IV
_pomni_servant (self)
    SV *self
    CODE:
    PortableServer::Servant res = new POmniServantActivator (self);
    RETVAL = PTR2IV(res);
    OUTPUT:
    RETVAL

MODULE = CORBA::omniORB            PACKAGE = POA_PortableServer::ServantLocator

IV
_pomni_servant (self)
    SV *self
    CODE:
    PortableServer::Servant res = new POmniServantLocator (self);
    RETVAL = PTR2IV(res);
    OUTPUT:
    RETVAL

MODULE = CORBA::omniORB		PACKAGE = CORBA::omniORB::InstVars

int
CLONE_SKIP(...)
    CODE:
    RETVAL = 1;
    OUTPUT:
    RETVAL

void
DESTROY (self)
    SV *self;
    CODE:
    pomni_instvars_destroy (aTHX_ (POmniInstVars *)SvPVX(SvRV(self)));

MODULE = CORBA::omniORB		PACKAGE = CORBA::omniORB::EntryLock

void
DESTROY (self)
    SV *self;
    CODE:
    SV *sv = SvRV(self);
    delete INT2PTR(POmniRatchetLock *, SvIV(sv));

MODULE = CORBA::omniORB		PACKAGE = DynamicAny::DynAny

void
DESTROY (self)
    DynamicAny::DynAny self
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    pomni_objref_destroy (aTHX_ self);
    CORBA::release (self);

CORBA::TypeCode
type (self)
    DynamicAny::DynAny self
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    RETVAL = THIS->type();
    OUTPUT:
    RETVAL

void
assign (self, dyn_any_obj)
    DynamicAny::DynAny self
    DynamicAny::DynAny dyn_any_obj
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    DynamicAny::DynAny_var dyn_any = DynamicAny::DynAny::_narrow(dyn_any_obj);
    try {
         THIS->assign( dyn_any );
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }

void
from_any (self, any)
    DynamicAny::DynAny self
    SV *any
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    try {
	CORBA::Any a;
	pomni_any_from_sv(aTHX_ &a, any);
	THIS->from_any(a);
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }

SV *
to_any (self)
    DynamicAny::DynAny self
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    CORBA::Any_var any = THIS->to_any();
    RETVAL = pomni_any_to_sv(aTHX_ any);
    OUTPUT:
    RETVAL

bool
equal (self, dyn_any_obj)
    DynamicAny::DynAny self
    DynamicAny::DynAny dyn_any_obj
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    DynamicAny::DynAny_var dyn_any = DynamicAny::DynAny::_narrow(dyn_any_obj);
    RETVAL = THIS->equal(dyn_any);
    OUTPUT:
    RETVAL

void
destroy (self)
    DynamicAny::DynAny self
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    THIS->destroy();

DynamicAny::DynAny
copy (self)
    DynamicAny::DynAny self
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    RETVAL = THIS->copy();
    OUTPUT:
    RETVAL

void
insert_boolean (self, value)
    DynamicAny::DynAny self
    bool value
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    try {
	THIS->insert_boolean((CORBA::Boolean)value);
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }

void
insert_octet (self,value)
    DynamicAny::DynAny self
    unsigned char value
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    try {
	THIS->insert_octet((CORBA::Octet)value);
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }

void
insert_char (self,value)
    DynamicAny::DynAny self
    char value
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    try {
	THIS->insert_char((CORBA::Char)value);
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }

void
insert_short (self,value)
    DynamicAny::DynAny self
    short value
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    try {
	THIS->insert_short((CORBA::Short)value);
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }

void
insert_ushort (self,value)
    DynamicAny::DynAny self
    unsigned short value
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    try {
	THIS->insert_ushort((CORBA::UShort)value);
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }

void
insert_long (self,value)
    DynamicAny::DynAny self
    long value
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    try {
	THIS->insert_long((CORBA::Long)value);
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }

void
insert_ulong (self,value)
    DynamicAny::DynAny self
    unsigned long value
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    try {
	THIS->insert_ulong((CORBA::ULong)value);
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }

void
insert_float (self,value)
    DynamicAny::DynAny self
    double value
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    try {
	THIS->insert_float((CORBA::Float)value);
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }

void
insert_double (self,value)
    DynamicAny::DynAny self
    double value
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    try {
	THIS->insert_double((CORBA::Double)value);
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }

void
insert_string (self,value)
    DynamicAny::DynAny self
    char* value
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    try {
	THIS->insert_string((const char*)value);
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }

void
insert_reference (self,value)
    DynamicAny::DynAny self
    CORBA::Object value
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    try {
	THIS->insert_reference((CORBA::Object_ptr)value);
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }

void
insert_typecode (self,value)
    DynamicAny::DynAny self
    CORBA::TypeCode value
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    try {
	THIS->insert_typecode((CORBA::TypeCode_ptr)value);
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }

#ifdef HAS_LongLong

void
insert_longlong (self,value)
    DynamicAny::DynAny self
    CORBA::LongLong value
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    try {
	THIS->insert_longlong(value);
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }

void
insert_ulonglong (self,value)
    DynamicAny::DynAny self
    CORBA::ULongLong value
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    try {
	THIS->insert_ulonglong(value);
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }

#endif

#ifdef HAS_LongDouble

void
insert_longdouble (self,value)
    DynamicAny::DynAny self
    CORBA::LongDouble value
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    try {
	THIS->insert_longdouble(value);
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }

#endif

# void insert_wchar(in wchar value)
# void insert_wstring(in wstring value)

void
insert_any (self,value)
    DynamicAny::DynAny self
    SV *value
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    try {
	CORBA::Any v;
	pomni_any_from_sv(aTHX_ &v, value);
	THIS->insert_any(v);
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }

void
insert_dyn_any (self, value_obj)
    DynamicAny::DynAny self
    DynamicAny::DynAny value_obj
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    DynamicAny::DynAny_var value = DynamicAny::DynAny::_narrow(value_obj);
    try {
	THIS->insert_dyn_any(value);
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }

# void insert_val(in ValueBase value)

bool
get_boolean (self)
    DynamicAny::DynAny self
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    try {
	RETVAL = THIS->get_boolean();
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL
   
unsigned char
get_octet (self)
    DynamicAny::DynAny self
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    try {
	RETVAL = THIS->get_octet();
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL
    
char
get_char (self)
    DynamicAny::DynAny self
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    try {
	RETVAL = THIS->get_char();
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL
    
short
get_short (self)
    DynamicAny::DynAny self
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    try {
	RETVAL = THIS->get_short();
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL
    
unsigned short
get_ushort (self)
    DynamicAny::DynAny self
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    try {
	RETVAL = THIS->get_ushort();
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL
    
long
get_long (self)
    DynamicAny::DynAny self
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    try {
	RETVAL = THIS->get_long();
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL
    
unsigned long
get_ulong (self)
    DynamicAny::DynAny self
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    try {
	RETVAL = THIS->get_ulong();
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL
    
double
get_float (self)
    DynamicAny::DynAny self
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    try {
	RETVAL = THIS->get_float();
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL
    
double
get_double (self)
    DynamicAny::DynAny self
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    try {
	RETVAL = THIS->get_double();
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL
    
SV *
get_string (self)
    DynamicAny::DynAny self
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    try {
	CORBA::String_var string = THIS->get_string();
	RETVAL = newSVpv((char *) string, 0);
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL
    
CORBA::Object
get_reference (self)
    DynamicAny::DynAny self
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    try {
	RETVAL = THIS->get_reference();
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL
    
CORBA::TypeCode
get_typecode (self)
    DynamicAny::DynAny self
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    try {
	RETVAL = THIS->get_typecode();
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL
    
#ifdef HAS_LongLong

CORBA::LongLong
get_longlong (self)
    DynamicAny::DynAny self
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    try {
	RETVAL = THIS->get_longlong();
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL
    
CORBA::ULongLong
get_ulonglong (self)
    DynamicAny::DynAny self
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    try {
	RETVAL = THIS->get_ulonglong();
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL

#endif

#ifdef HAS_LongDouble
    
CORBA::LongDouble
get_longdouble (self)
    DynamicAny::DynAny self
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    try {
	RETVAL = THIS->get_longdouble();
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL

#endif
    
# wchar get_wchar()
# wstring get_wstring()

SV *
get_any (self)
    DynamicAny::DynAny self
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    try {
	CORBA::Any_var any = THIS->get_any();
	RETVAL = pomni_any_to_sv(aTHX_ any);
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL
    
DynamicAny::DynAny
get_dyn_any (self)
    DynamicAny::DynAny self
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    try {
      RETVAL = THIS->get_dyn_any();
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL
    
# ValueBase get_val()

bool
seek (self,index)
    DynamicAny::DynAny self
    long index
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    RETVAL = THIS->seek(index);
    OUTPUT:
    RETVAL

void
rewind (self)
    DynamicAny::DynAny self
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    THIS->rewind();

bool
next (self)
    DynamicAny::DynAny self
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    RETVAL = THIS->next();
    OUTPUT:
    RETVAL

unsigned long
component_count (self)
    DynamicAny::DynAny self
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    RETVAL = THIS->component_count();
    OUTPUT:
    RETVAL

DynamicAny::DynAny
current_component (self)
    DynamicAny::DynAny self
    CODE:
    DynamicAny::DynAny_var THIS = DynamicAny::DynAny::_narrow(self);
    RETVAL = THIS->current_component();
    OUTPUT:
    RETVAL

MODULE = CORBA::omniORB		PACKAGE = DynamicAny::DynFixed

void
DESTROY (self)
    DynamicAny::DynFixed self
    CODE:
    pomni_objref_destroy (aTHX_ self);
    CORBA::release (self);

char *
get_value (self)
    DynamicAny::DynFixed self
    CODE:
    DynamicAny::DynFixed_var THIS = DynamicAny::DynFixed::_narrow(self);
    CORBA::String_var string = THIS->get_value();
    RETVAL = (char *) string;
    OUTPUT:
    RETVAL

#bool	CORBA V2.3: boolean set_value(in string val) //XXX
void
set_value (self,val)
    DynamicAny::DynFixed self
    char* val
    CODE:
    DynamicAny::DynFixed_var THIS = DynamicAny::DynFixed::_narrow(self);
    try {
	THIS->set_value(val);
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    
# narrow helper
SV *
_narrow(dyn_any)
    DynamicAny::DynAny dyn_any
    CODE:
    RETVAL = pomni_local_objref_to_sv (aTHX_
				       DynamicAny::DynFixed::_narrow(dyn_any),
				       "DynamicAny::DynFixed", true);
    OUTPUT:
    RETVAL

MODULE = CORBA::omniORB		PACKAGE = DynamicAny::DynEnum

void
DESTROY (self)
    DynamicAny::DynEnum self
    CODE:
    pomni_objref_destroy (aTHX_ self);
    CORBA::release (self);

char*
get_as_string(self)
    DynamicAny::DynEnum self
    CODE:
    DynamicAny::DynEnum_var THIS = DynamicAny::DynEnum::_narrow(self);
    CORBA::String_var string = THIS->get_as_string();
    RETVAL = (char *) string;
    OUTPUT:
    RETVAL

void
set_as_string(self,value)
    DynamicAny::DynEnum self
    char* value
    CODE:
    DynamicAny::DynEnum_var THIS = DynamicAny::DynEnum::_narrow(self);
    try {
	THIS->set_as_string(value);
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }

unsigned long
get_as_ulong(self)
    DynamicAny::DynEnum self
    CODE:
    DynamicAny::DynEnum_var THIS = DynamicAny::DynEnum::_narrow(self);
    RETVAL = THIS->get_as_ulong();
    OUTPUT:
    RETVAL

void
set_as_ulong(self,value)
    DynamicAny::DynEnum self
    unsigned long value
    CODE:
    DynamicAny::DynEnum_var THIS = DynamicAny::DynEnum::_narrow(self);
    try {
	THIS->set_as_ulong(value);
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }


# narrow helper
SV *
_narrow(dyn_any)
    DynamicAny::DynAny dyn_any
    CODE:
    RETVAL = pomni_local_objref_to_sv (aTHX_
				       DynamicAny::DynEnum::_narrow(dyn_any),
				       "DynamicAny::DynEnum", true);
    OUTPUT:
    RETVAL

MODULE = CORBA::omniORB		PACKAGE = DynamicAny::DynStruct
void
DESTROY (self)
    DynamicAny::DynStruct self
    CODE:
    pomni_objref_destroy (aTHX_ self);
    CORBA::release (self);


SV *
current_member_name(self)
    DynamicAny::DynStruct self
    CODE:
    DynamicAny::DynStruct_var THIS = DynamicAny::DynStruct::_narrow(self);
    try {
	CORBA::String_var string = THIS->current_member_name();
	RETVAL = newSVpv((char *) string, 0);
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL

char*
current_member_kind(self)
    DynamicAny::DynStruct self
    CODE:
    DynamicAny::DynStruct_var THIS = DynamicAny::DynStruct::_narrow(self);
    try {
	RETVAL = (char*) TCKind_to_str( THIS->current_member_kind() );
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL

AV*
get_members(self)
    DynamicAny::DynStruct self
    CODE:
    DynamicAny::DynStruct_var THIS = DynamicAny::DynStruct::_narrow(self);
      DynamicAny::NameValuePairSeq_var mbrs = THIS->get_members();
      RETVAL = newAV();
      av_extend(RETVAL, mbrs->length());
      for( CORBA::ULong i = 0; i < mbrs->length(); i++ ) {
        HV* p_mbr = newHV();
	sv_2mortal((SV*)p_mbr);
        
	hv_store(p_mbr, "id",    2, newSVpv(mbrs[i].id, 0),          0);
	hv_store(p_mbr, "value", 5, pomni_any_to_sv(aTHX_ mbrs[i].value), 0);

        av_push(RETVAL, newRV_inc((SV*)p_mbr));
      }
    OUTPUT:
      RETVAL

void
set_members(self,members)
    DynamicAny::DynStruct self
    SV* members
    CODE:
    DynamicAny::DynStruct_var THIS = DynamicAny::DynStruct::_narrow(self);
    if( !SvROK(members) )
      croak("members - must be an array reference");
    members = SvRV(members);
    if( SvTYPE(members) != SVt_PVAV )
      croak("members - must be an array reference");
    DynamicAny::NameValuePairSeq_var mbrs = new DynamicAny::NameValuePairSeq;
    mbrs->length(av_len((AV*)members)+1);
    for( I32 i = 0; i <= av_len((AV*)members); i++ ) {
      SV* sv = *av_fetch( (AV*)members, i, 0 );
      if( !SvROK(sv) || (SvTYPE(SvRV(sv)) != SVt_PVHV) )
        croak("members - must be array of hashes");
      HV *hv = (HV *)SvRV(sv);

      SV** id    = hv_fetch( hv, "id",    2, 0 );
      if( !id || !SvPOK(*id) )
        croak("members - must contain string field 'id'");
      mbrs[(unsigned long)i].id = CORBA::string_dup( SvPV(*id, PL_na) );

      CORBA::Any any;
      SV** value = hv_fetch( hv, "value", 5, 0 );
      if( !value || !pomni_any_from_sv(aTHX_ &any, *value))
	  croak("members - must contain CORBA::Any field 'value'");
      mbrs[(unsigned long)i].value = any;
    }
    try {
	THIS->set_members( mbrs );
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
      
AV*
get_members_as_dyn_any(self)
    DynamicAny::DynStruct self
    CODE:
    DynamicAny::DynStruct_var THIS = DynamicAny::DynStruct::_narrow(self);
    DynamicAny::NameDynAnyPairSeq_var mbrs = THIS->get_members_as_dyn_any();
      RETVAL = newAV();
      av_extend(RETVAL, mbrs->length());
      for( CORBA::ULong i = 0; i < mbrs->length(); i++ ) {
        HV* p_mbr = newHV();
	sv_2mortal((SV*)p_mbr);
        
	hv_store(p_mbr, "id",    2, newSVpv(mbrs[(unsigned long)i].id, 0),          0);
	hv_store(p_mbr, "value", 5, pomni_dyn_any_to_sv(aTHX_ mbrs[(unsigned long)i].value), 0);

        av_push(RETVAL, newRV_inc((SV*)p_mbr));
      }
    OUTPUT:
      RETVAL

void
set_members_as_dyn_any(self,members)
    DynamicAny::DynStruct self
    SV* members
    CODE:
    DynamicAny::DynStruct_var THIS = DynamicAny::DynStruct::_narrow(self);
    if( !SvROK(members) )
      croak("members - must be an array reference");
    members = SvRV(members);
    if( SvTYPE(members) != SVt_PVAV )
      croak("members - must be an array reference");
    DynamicAny::NameDynAnyPairSeq_var mbrs = new DynamicAny::NameDynAnyPairSeq;
    mbrs->length(av_len((AV*)members)+1);
    for( I32 i = 0; i <= av_len((AV*)members); i++ ) {
      SV* sv = *av_fetch( (AV*)members, i, 0 );
      if( !SvROK(sv) || (SvTYPE(SvRV(sv)) != SVt_PVHV) )
        croak("members - must be array of hashes");
      HV *hv = (HV *)SvRV(sv);

      SV** id    = hv_fetch( hv, "id",    2, 0 );
      if( !id || !SvPOK(*id) )
        croak("members - must contain string field 'id'");
      mbrs[(unsigned long)i].id = CORBA::string_dup( SvPV(*id, PL_na) );

      SV** value = hv_fetch( hv, "value", 5, 0 );
      if( !value || !sv_isa(*value, "DynamicAny::DynAny"))
        croak("members - must contain DynamicAny::DynAny field 'value'");
      IV tmp = SvIV((SV*)SvRV(*value));
      DynamicAny::DynAny *dynany = INT2PTR(DynamicAny::DynAny*,tmp);
      mbrs[(unsigned long)i].value = dynany->copy();
    }
    try {
	THIS->set_members_as_dyn_any( mbrs );
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
      
# narrow helper
SV *
_narrow(dyn_any)
    DynamicAny::DynAny dyn_any
    CODE:
    RETVAL = pomni_local_objref_to_sv (aTHX_
				       DynamicAny::DynStruct::_narrow(dyn_any),
				       "DynamicAny::DynStruct", true);
    OUTPUT:
    RETVAL

MODULE = CORBA::omniORB		PACKAGE = DynamicAny::DynUnion

void
DESTROY (self)
    DynamicAny::DynUnion self
    CODE:
    pomni_objref_destroy (aTHX_ self);
    CORBA::release (self);

DynamicAny::DynAny
get_discriminator (self)
    DynamicAny::DynUnion self
    CODE:
    DynamicAny::DynUnion_var THIS = DynamicAny::DynUnion::_narrow(self);
    RETVAL = THIS->get_discriminator();
    OUTPUT:
    RETVAL

void
set_discriminator (self,d_obj)
    DynamicAny::DynUnion self
    DynamicAny::DynAny d_obj
    CODE:
    DynamicAny::DynUnion_var THIS = DynamicAny::DynUnion::_narrow(self);
    DynamicAny::DynUnion_var d = DynamicAny::DynUnion::_narrow(d_obj);
    try {
	THIS->set_discriminator(d);
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }

void
set_to_default_member (self)
    DynamicAny::DynUnion self
    CODE:
    DynamicAny::DynUnion_var THIS = DynamicAny::DynUnion::_narrow(self);
    try {
	THIS->set_to_default_member();
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }

void
set_to_no_active_member (self)
    DynamicAny::DynUnion self
    CODE:
    DynamicAny::DynUnion_var THIS = DynamicAny::DynUnion::_narrow(self);
    try {
	THIS->set_to_no_active_member();
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }

bool
has_no_active_member (self)
    DynamicAny::DynUnion self
    CODE:
    DynamicAny::DynUnion_var THIS = DynamicAny::DynUnion::_narrow(self);
    RETVAL = THIS->has_no_active_member();
    OUTPUT:
    RETVAL

char *
discriminator_kind (self)
    DynamicAny::DynUnion self
    CODE:
    DynamicAny::DynUnion_var THIS = DynamicAny::DynUnion::_narrow(self);
    RETVAL = (char *) TCKind_to_str( THIS->discriminator_kind() );
    OUTPUT:
    RETVAL

DynamicAny::DynAny
member (self)
    DynamicAny::DynUnion self
    CODE:
    DynamicAny::DynUnion_var THIS = DynamicAny::DynUnion::_narrow(self);
    try {
	RETVAL = THIS->member();
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL
    
SV *
member_name (self)
    DynamicAny::DynUnion self
    CODE:
    DynamicAny::DynUnion_var THIS = DynamicAny::DynUnion::_narrow(self);
    try {
	CORBA::String_var string = THIS->member_name();
	RETVAL = newSVpv((char *) string, 0);
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL
    
char*
member_kind (self)
    DynamicAny::DynUnion self
    CODE:
    DynamicAny::DynUnion_var THIS = DynamicAny::DynUnion::_narrow(self);
    try {
	RETVAL = (char *) TCKind_to_str( THIS->member_kind() );
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
      pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL

# narrow helper
SV *
_narrow(dyn_any)
    DynamicAny::DynAny dyn_any
    CODE:
    RETVAL = pomni_local_objref_to_sv (aTHX_
				       DynamicAny::DynUnion::_narrow(dyn_any),
				       "DynamicAny::DynUnion", true);
    OUTPUT:
    RETVAL

MODULE = CORBA::omniORB		PACKAGE = DynamicAny::DynSequence

void
DESTROY (self)
    DynamicAny::DynSequence self
    CODE:
    pomni_objref_destroy (aTHX_ self);
    CORBA::release (self);

unsigned long
get_length (self)
    DynamicAny::DynSequence self
    CODE:
    DynamicAny::DynSequence_var THIS = DynamicAny::DynSequence::_narrow(self);
    RETVAL = THIS->get_length();
    OUTPUT:
    RETVAL

void
set_length (self,len)
    DynamicAny::DynSequence self
    unsigned long len
    CODE:
    DynamicAny::DynSequence_var THIS = DynamicAny::DynSequence::_narrow(self);
    try {
	THIS->set_length(len);
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }

AV*
get_elements (self)
    DynamicAny::DynSequence self
    CODE:
    DynamicAny::DynSequence_var THIS = DynamicAny::DynSequence::_narrow(self);
    DynamicAny::AnySeq_var els = THIS->get_elements();
    RETVAL = newAV();
    av_extend( RETVAL, els->length() );
    for( CORBA::ULong i = 0; i < els->length(); i++ ) {
      av_push( RETVAL, pomni_any_to_sv(aTHX_ els[i]) );
    }
    OUTPUT:
    RETVAL

void
set_elements(self,elements)
    DynamicAny::DynSequence self
    SV* elements
    CODE:
    DynamicAny::DynSequence_var THIS = DynamicAny::DynSequence::_narrow(self);
    if( !SvROK(elements) )
      croak("elements - must be an array reference");
    elements = SvRV(elements);
    if( SvTYPE(elements) != SVt_PVAV )
      croak("elements - must be an array reference");
    DynamicAny::AnySeq_var mbrs = new DynamicAny::AnySeq;
    mbrs->length(av_len((AV*)elements)+1);
    for( I32 i = 0; i <= av_len((AV*)elements); i++ ) {
	CORBA::Any any;
	SV* sv = *av_fetch( (AV*)elements, i, 0 );
	if (!pomni_any_from_sv(aTHX_ &any, sv))
	    croak("elements - must contain CORBA::Any values");
	mbrs[(unsigned long)i] = any;
    }
    try {
	THIS->set_elements( mbrs );
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
      
AV*
get_elements_as_dyn_any(self)
    DynamicAny::DynSequence self
    CODE:
    DynamicAny::DynSequence_var THIS = DynamicAny::DynSequence::_narrow(self);
    DynamicAny::DynAnySeq_var mbrs = THIS->get_elements_as_dyn_any();
      RETVAL = newAV();
      av_extend(RETVAL, mbrs->length());
      for( CORBA::ULong i = 0; i < mbrs->length(); i++ ) {
        av_push( RETVAL, pomni_dyn_any_to_sv(aTHX_ mbrs[(unsigned long)i]) );
      }
    OUTPUT:
      RETVAL

void
set_elements_as_dyn_any(self,elements)
    DynamicAny::DynSequence self
    SV* elements
    CODE:
    DynamicAny::DynSequence_var THIS = DynamicAny::DynSequence::_narrow(self);
    if( !SvROK(elements) )
      croak("elements - must be an array reference");
    elements = SvRV(elements);
    if( SvTYPE(elements) != SVt_PVAV )
      croak("elements - must be an array reference");
    DynamicAny::DynAnySeq_var mbrs = new DynamicAny::DynAnySeq;
    mbrs->length(av_len((AV*)elements)+1);
    for( I32 i = 0; i <= av_len((AV*)elements); i++ ) {
      SV* sv = *av_fetch( (AV*)elements, i, 0 );
      if( !sv_isa( sv, "DynamicAny::DynAny" ) )
        croak("elements - must contain DynamicAny::DynAny values");
      IV tmp = SvIV((SV*)SvRV(sv));
      DynamicAny::DynAny *dynany = INT2PTR(DynamicAny::DynAny*,tmp);
      mbrs[(unsigned long)i] = dynany->copy();
    }
    try {
	THIS->set_elements_as_dyn_any( mbrs );
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
      
# narrow helper
SV *
_narrow(dyn_any)
    DynamicAny::DynAny dyn_any
    CODE:
    RETVAL
        = pomni_local_objref_to_sv (aTHX_
				    DynamicAny::DynSequence::_narrow(dyn_any),
				    "DynamicAny::DynSequence", true);
    OUTPUT:
    RETVAL

MODULE = CORBA::omniORB		PACKAGE = DynamicAny::DynArray

void
DESTROY (self)
    DynamicAny::DynArray self
    CODE:
    pomni_objref_destroy (aTHX_ self);
    CORBA::release (self);

AV*
get_elements (self)
    DynamicAny::DynArray self
    CODE:
    DynamicAny::DynArray_var THIS = DynamicAny::DynArray::_narrow(self);
    DynamicAny::AnySeq_var els = THIS->get_elements();
    RETVAL = newAV();
    av_extend( RETVAL, els->length() );
    for( CORBA::ULong i = 0; i < els->length(); i++ ) {
      av_push( RETVAL, pomni_any_to_sv(aTHX_ els[i]) );
    }
    OUTPUT:
    RETVAL

void
set_elements(self,elements)
    DynamicAny::DynArray self
    SV* elements
    CODE:
    DynamicAny::DynArray_var THIS = DynamicAny::DynArray::_narrow(self);
    if( !SvROK(elements) )
      croak("elements - must be an array reference");
    elements = SvRV(elements);
    if( SvTYPE(elements) != SVt_PVAV )
      croak("elements - must be an array reference");
    DynamicAny::AnySeq_var mbrs = new DynamicAny::AnySeq;
    mbrs->length(av_len((AV*)elements)+1);
    for( I32 i = 0; i <= av_len((AV*)elements); i++ ) {
	CORBA::Any any;
	SV *sv = *av_fetch( (AV*)elements, i, 0 );
	if (pomni_any_from_sv(aTHX_ &any, sv))
	    croak("elements - must contain CORBA::Any values");
	mbrs[(unsigned long)i] = any;
    }
    try {
	THIS->set_elements( mbrs );
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
      
AV*
get_elements_as_dyn_any(self)
    DynamicAny::DynArray self
    CODE:
    DynamicAny::DynArray_var THIS = DynamicAny::DynArray::_narrow(self);
    DynamicAny::DynAnySeq_var mbrs = THIS->get_elements_as_dyn_any();
      RETVAL = newAV();
      av_extend(RETVAL, mbrs->length());
      for( CORBA::ULong i = 0; i < mbrs->length(); i++ ) {
        av_push( RETVAL, pomni_dyn_any_to_sv(aTHX_ mbrs[(unsigned long)i]) );
      }
    OUTPUT:
      RETVAL

void
set_elements_as_dyn_any(self,elements)
    DynamicAny::DynArray self
    SV* elements
    CODE:
    DynamicAny::DynArray_var THIS = DynamicAny::DynArray::_narrow(self);
    if( !SvROK(elements) )
      croak("elements - must be an array reference");
    elements = SvRV(elements);
    if( SvTYPE(elements) != SVt_PVAV )
      croak("elements - must be an array reference");
    DynamicAny::DynAnySeq_var mbrs = new DynamicAny::DynAnySeq;
    mbrs->length(av_len((AV*)elements)+1);
    for( I32 i = 0; i <= av_len((AV*)elements); i++ ) {
      SV* sv = *av_fetch( (AV*)elements, i, 0 );
      if( !sv_isa( sv, "DynamicAny::DynAny" ) )
        croak("elements - must contain DynamicAny::DynAny values");
      IV tmp = SvIV((SV*)SvRV(sv));
      DynamicAny::DynAny *dynany = INT2PTR(DynamicAny::DynAny*,tmp);
      mbrs[(unsigned long)i] = dynany->copy();
    }
    try {
	THIS->set_elements_as_dyn_any( mbrs );
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
      
# narrow helper
SV *
_narrow(dyn_any)
    DynamicAny::DynAny dyn_any
    CODE:
    RETVAL = pomni_local_objref_to_sv (aTHX_
				       DynamicAny::DynArray::_narrow(dyn_any),
				       "DynamicAny::DynArray", true);
    OUTPUT:
    RETVAL

MODULE = CORBA::omniORB		PACKAGE = DynamicAny::DynValue

#if 0

void
DESTROY (self)
    DynamicAny::DynValue self
    CODE:
    pomni_objref_destroy (aTHX_ self);
    CORBA::release (self);

SV *
current_member_name (self)
    DynamicAny::DynValue self
    CODE:
    DynamicAny::DynValue_var THIS = DynamicAny::DynValue::_narrow(self);
    try {
	CORBA::String_var string = THIS->current_member_name();
	RETVAL = newSVpv((char *) string, 0);
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL
	
char*
current_member_kind(self)
    DynamicAny::DynValue self
    CODE:
    DynamicAny::DynValue_var THIS = DynamicAny::DynValue::_narrow(self);
    try {
	RETVAL = (char*) TCKind_to_str( THIS->current_member_kind() );
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL

AV*
get_members(self)
    DynamicAny::DynStruct self
    CODE:
    DynamicAny::DynValue_var THIS = DynamicAny::DynValue::_narrow(self);
    DynamicAny::NameValuePairSeq_var mbrs = THIS->get_members();
      RETVAL = newAV();
      av_extend(RETVAL, mbrs->length());
      for( CORBA::ULong i = 0; i < mbrs->length(); i++ ) {
        HV* p_mbr = newHV();
	sv_2mortal((SV*)p_mbr);
        
	hv_store(p_mbr, "id",    2, newSVpv(mbrs[(unsigned long)i].id, 0),          0);
	hv_store(p_mbr, "value", 5, pomni_any_to_sv(mbrs[(unsigned long)i].value), 0);

        av_push(RETVAL, newRV_inc((SV*)p_mbr));
      }
    OUTPUT:
      RETVAL

void
set_members(self,members)
    DynamicAny::DynStruct self
    SV* members
    CODE:
    DynamicAny::DynValue_var THIS = DynamicAny::DynValue::_narrow(self);
    if( !SvROK(members) )
      croak("members - must be an array reference");
    members = SvRV(members);
    if( SvTYPE(members) != SVt_PVAV )
      croak("members - must be an array reference");
    DynamicAny::NameValuePairSeq_var mbrs = new DynamicAny::NameValuePairSeq;
    mbrs->length(av_len((AV*)members)+1);
    for( I32 i = 0; i <= av_len((AV*)members); i++ ) {
      SV* sv = *av_fetch( (AV*)members, i, 0 );
      if( !SvROK(sv) || (SvTYPE(SvRV(sv)) != SVt_PVHV) )
        croak("members - must be array of hashes");
      HV *hv = (HV *)SvRV(sv);

      SV** id    = hv_fetch( hv, "id",    2, 0 );
      if( !id || !SvPOK(*id) )
        croak("members - must contain string field 'id'");
      mbrs[(unsigned long)i].id = CORBA::string_dup( SvPV(*id, PL_na) );

      CORBA::Any any;
      SV** value = hv_fetch( hv, "value", 5, 0 );
      if (!value || !pomni_any_from_sv(aTHX_ &any, sv))
	  croak("members - must contain CORBA::Any field 'value'");
      mbrs[(unsigned long)i].value = any;
    }
    try {
	THIS->set_members( mbrs );
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
      
AV*
get_members_as_dyn_any(self)
    DynamicAny::DynStruct self
    CODE:
      DynamicAny::NameDynAnyPairSeq_var mbrs = self->get_members_as_dyn_any();
      RETVAL = newAV();
      av_extend(RETVAL, mbrs->length());
      for( CORBA::ULong i = 0; i < mbrs->length(); i++ ) {
        HV* p_mbr = newHV();
	sv_2mortal((SV*)p_mbr);
        
	hv_store(p_mbr, "id",    2, newSVpv(mbrs[(unsigned long)i].id, 0),          0);
	hv_store(p_mbr, "value", 5, pomni_dyn_any_to_sv(mbrs[(unsigned long)i].value), 0);

        av_push(RETVAL, newRV_inc((SV*)p_mbr));
      }
    OUTPUT:
      RETVAL

void
set_members_as_dyn_any(self,members)
    DynamicAny::DynStruct self
    SV* members
    CODE:
    DynamicAny::DynValue_var THIS = DynamicAny::DynValue::_narrow(self);
    if( !SvROK(members) )
      croak("members - must be an array reference");
    members = SvRV(members);
    if( SvTYPE(members) != SVt_PVAV )
      croak("members - must be an array reference");
    DynamicAny::NameDynAnyPairSeq_var mbrs = new DynamicAny::NameDynAnyPairSeq;
    mbrs->length(av_len((AV*)members)+1);
    for( I32 i = 0; i <= av_len((AV*)members); i++ ) {
      SV* sv = *av_fetch( (AV*)members, i, 0 );
      if( !SvROK(sv) || (SvTYPE(SvRV(sv)) != SVt_PVHV) )
        croak("members - must be array of hashes");
      HV *hv = (HV *)SvRV(sv);

      SV** id    = hv_fetch( hv, "id",    2, 0 );
      if( !id || !SvPOK(*id) )
        croak("members - must contain string field 'id'");
      mbrs[(unsigned long)i].id = CORBA::string_dup( SvPV(*id, PL_na) );

      SV** value = hv_fetch( hv, "value", 5, 0 );
      if( !value || !sv_isa(*value, "DynamicAny::DynAny"))
        croak("members - must contain DynamicAny::DynAny field 'value'");
      IV tmp = SvIV((SV*)SvRV(*value));
      DynamicAny::DynAny *dynany = INT2PTR(DynamicAny::DynAny*,tmp);
      mbrs[(unsigned long)i].value = dynany->copy();
    }
    try {
	THIS->set_members_as_dyn_any( mbrs );
    } catch (DynamicAny::DynAny::TypeMismatch &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    } catch (DynamicAny::DynAny::InvalidValue &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
      
# narrow helper
SV *
_narrow(dyn_any)
    DynamicAny::DynAny dyn_any
    CODE:
    RETVAL = pomni_local_objref_to_sv (aTHX_
				       DynamicAny::DynValue::_narrow(dyn_any),
				       "DynamicAny::DynValue", true);
    OUTPUT:
    RETVAL

#endif

MODULE = CORBA::omniORB		PACKAGE = DynamicAny::DynAnyFactory

void
DESTROY (self)
    DynamicAny::DynAnyFactory self
    CODE:
    pomni_objref_destroy (aTHX_ self);
    CORBA::release (self);

DynamicAny::DynAny
create_dyn_any(self, value)
    DynamicAny::DynAnyFactory self
    SV *value
    CODE:
    DynamicAny::DynAnyFactory_var THIS
        = DynamicAny::DynAnyFactory::_narrow(self);
    try {
	CORBA::Any v;
	pomni_any_from_sv(aTHX_ &v, value);
	RETVAL = THIS->create_dyn_any(v);
    } catch (DynamicAny::DynAnyFactory::InconsistentTypeCode &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL
    
DynamicAny::DynAny
create_dyn_any_from_type_code(self, type)
    DynamicAny::DynAnyFactory self
    CORBA::TypeCode type
    CODE:
    DynamicAny::DynAnyFactory_var THIS
        = DynamicAny::DynAnyFactory::_narrow(self);
    try {
	RETVAL = THIS->create_dyn_any_from_type_code(type);
    } catch (DynamicAny::DynAnyFactory::InconsistentTypeCode &ex) {
	pomni_throw (aTHX_ pomni_builtin_except (aTHX_ &ex));
    }
    OUTPUT:
    RETVAL