#include "matrix.h"
#include <omniORB2/tcDescriptor.h>

static const char* _0RL_library_version = omniORB_2_7;


static CORBA::TypeCode_ptr _0RL_tc_Row = CORBA::TypeCode::PR_alias_tc("IDL:Row:1.0", "Row", CORBA::TypeCode::PR_sequence_tc(0, CORBA::TypeCode::PR_double_tc()));

const CORBA::TypeCode_ptr _tc_Row = _0RL_tc_Row;

static CORBA::TypeCode_ptr _0RL_tc_Column = CORBA::TypeCode::PR_alias_tc("IDL:Column:1.0", "Column", CORBA::TypeCode::PR_sequence_tc(0, CORBA::TypeCode::PR_double_tc()));

const CORBA::TypeCode_ptr _tc_Column = _0RL_tc_Column;

static CORBA::TypeCode_ptr _0RL_tc_Matrix_mrep = CORBA::TypeCode::PR_alias_tc("IDL:Matrix/rep:1.0", "rep", CORBA::TypeCode::PR_sequence_tc(0, _0RL_tc_Row));

const CORBA::TypeCode_ptr Matrix::_tc_rep = _0RL_tc_Matrix_mrep;

const CORBA::TypeCode_ptr _tc_Matrix = CORBA::TypeCode::PR_interface_tc("IDL:Matrix:1.0", "Matrix");


#ifndef __0RL_tcParser_buildDesc_s0_cdouble__
#define __0RL_tcParser_buildDesc_s0_cdouble__
static void
_0RL_tcParser_setElementCount_s0_cdouble(tcSequenceDesc* _desc, CORBA::ULong _len)
{
  ((_CORBA_Unbounded_Sequence_w_FixSizeElement<CORBA::Double,8,8>*)_desc->opq_seq)->length(_len);
}

static CORBA::ULong
_0RL_tcParser_getElementCount_s0_cdouble(tcSequenceDesc* _desc)
{
  return ((_CORBA_Unbounded_Sequence_w_FixSizeElement<CORBA::Double,8,8>*)_desc->opq_seq)->length();
}

static CORBA::Boolean
_0RL_tcParser_getElementDesc_s0_cdouble(tcSequenceDesc* _desc, CORBA::ULong _index, tcDescriptor& _newdesc)
{
  _0RL_buildDesc_cdouble(_newdesc, (*((_CORBA_Unbounded_Sequence_w_FixSizeElement<CORBA::Double,8,8>*)_desc->opq_seq))[_index]);
  return 1;
}

static void
_0RL_buildDesc_s0_cdouble(tcDescriptor &_desc, const _CORBA_Unbounded_Sequence_w_FixSizeElement<CORBA::Double,8,8>& _data)
{
  _desc.p_sequence.opq_seq = (void*) &_data;
  _desc.p_sequence.setElementCount =
    _0RL_tcParser_setElementCount_s0_cdouble;
  _desc.p_sequence.getElementCount =
    _0RL_tcParser_getElementCount_s0_cdouble;
  _desc.p_sequence.getElementDesc =
    _0RL_tcParser_getElementDesc_s0_cdouble;
}
#endif

#if defined(__0RL_seq_any_s0_cdouble__) && defined(__0RL_seq_anyimpl_Row__)
#undef __0RL_seq_any_s0_cdouble__

void _0RL_seq_anyinsert_Row(CORBA::Any& a, const _CORBA_Unbounded_Sequence_w_FixSizeElement<CORBA::Double,8,8>& s)
{
  tcDescriptor tcdesc;
  _0RL_buildDesc_s0_cdouble(tcdesc, s);
  a.PR_packFrom(_tc_Row, &tcdesc);
}

void _0RL_seq_delete_Row(void* data)
{
  delete (Row*)data;
}

CORBA::Boolean _0RL_seq_anyextract_Row(const CORBA::Any& a, _CORBA_Unbounded_Sequence_w_FixSizeElement<CORBA::Double,8,8>*& s_out)
{
  s_out = 0;
  Row* stmp = (Row*) a.PR_getCachedData();
  if( stmp == 0 ) {
    tcDescriptor tcdesc;
    stmp = new Row;
    _0RL_buildDesc_s0_cdouble(tcdesc, *stmp);
    if( a.PR_unpackTo(_tc_Row, &tcdesc)) {
      ((CORBA::Any*)&a)->PR_setCachedData(stmp, _0RL_seq_delete_Row);
      s_out = stmp;
      return 1;
    } else {
      delete stmp;
      return 0;
    }
  } else {
    CORBA::TypeCode_var tctmp = a.type();
    if( tctmp->equal(_tc_Row) ) {
      s_out = stmp;
      return 1;
    } else {
      return 0;
    }
  }
}

#endif


#ifndef __0RL_tcParser_buildDesc_s0_cdouble__
#define __0RL_tcParser_buildDesc_s0_cdouble__
static void
_0RL_tcParser_setElementCount_s0_cdouble(tcSequenceDesc* _desc, CORBA::ULong _len)
{
  ((_CORBA_Unbounded_Sequence_w_FixSizeElement<CORBA::Double,8,8>*)_desc->opq_seq)->length(_len);
}

static CORBA::ULong
_0RL_tcParser_getElementCount_s0_cdouble(tcSequenceDesc* _desc)
{
  return ((_CORBA_Unbounded_Sequence_w_FixSizeElement<CORBA::Double,8,8>*)_desc->opq_seq)->length();
}

static CORBA::Boolean
_0RL_tcParser_getElementDesc_s0_cdouble(tcSequenceDesc* _desc, CORBA::ULong _index, tcDescriptor& _newdesc)
{
  _0RL_buildDesc_cdouble(_newdesc, (*((_CORBA_Unbounded_Sequence_w_FixSizeElement<CORBA::Double,8,8>*)_desc->opq_seq))[_index]);
  return 1;
}

static void
_0RL_buildDesc_s0_cdouble(tcDescriptor &_desc, const _CORBA_Unbounded_Sequence_w_FixSizeElement<CORBA::Double,8,8>& _data)
{
  _desc.p_sequence.opq_seq = (void*) &_data;
  _desc.p_sequence.setElementCount =
    _0RL_tcParser_setElementCount_s0_cdouble;
  _desc.p_sequence.getElementCount =
    _0RL_tcParser_getElementCount_s0_cdouble;
  _desc.p_sequence.getElementDesc =
    _0RL_tcParser_getElementDesc_s0_cdouble;
}
#endif

#if defined(__0RL_seq_any_s0_cdouble__) && defined(__0RL_seq_anyimpl_Column__)
#undef __0RL_seq_any_s0_cdouble__

void _0RL_seq_anyinsert_Column(CORBA::Any& a, const _CORBA_Unbounded_Sequence_w_FixSizeElement<CORBA::Double,8,8>& s)
{
  tcDescriptor tcdesc;
  _0RL_buildDesc_s0_cdouble(tcdesc, s);
  a.PR_packFrom(_tc_Column, &tcdesc);
}

void _0RL_seq_delete_Column(void* data)
{
  delete (Column*)data;
}

CORBA::Boolean _0RL_seq_anyextract_Column(const CORBA::Any& a, _CORBA_Unbounded_Sequence_w_FixSizeElement<CORBA::Double,8,8>*& s_out)
{
  s_out = 0;
  Column* stmp = (Column*) a.PR_getCachedData();
  if( stmp == 0 ) {
    tcDescriptor tcdesc;
    stmp = new Column;
    _0RL_buildDesc_s0_cdouble(tcdesc, *stmp);
    if( a.PR_unpackTo(_tc_Column, &tcdesc)) {
      ((CORBA::Any*)&a)->PR_setCachedData(stmp, _0RL_seq_delete_Column);
      s_out = stmp;
      return 1;
    } else {
      delete stmp;
      return 0;
    }
  } else {
    CORBA::TypeCode_var tctmp = a.type();
    if( tctmp->equal(_tc_Column) ) {
      s_out = stmp;
      return 1;
    } else {
      return 0;
    }
  }
}

#endif


#ifndef __0RL_tcParser_buildDesc_s0_s0_cdouble__
#define __0RL_tcParser_buildDesc_s0_s0_cdouble__
static void
_0RL_tcParser_setElementCount_s0_s0_cdouble(tcSequenceDesc* _desc, CORBA::ULong _len)
{
  ((_CORBA_Unbounded_Sequence<_CORBA_Unbounded_Sequence_w_FixSizeElement<CORBA::Double,8,8> >*)_desc->opq_seq)->length(_len);
}

static CORBA::ULong
_0RL_tcParser_getElementCount_s0_s0_cdouble(tcSequenceDesc* _desc)
{
  return ((_CORBA_Unbounded_Sequence<_CORBA_Unbounded_Sequence_w_FixSizeElement<CORBA::Double,8,8> >*)_desc->opq_seq)->length();
}

static CORBA::Boolean
_0RL_tcParser_getElementDesc_s0_s0_cdouble(tcSequenceDesc* _desc, CORBA::ULong _index, tcDescriptor& _newdesc)
{
  _0RL_buildDesc_s0_cdouble(_newdesc, (*((_CORBA_Unbounded_Sequence<_CORBA_Unbounded_Sequence_w_FixSizeElement<CORBA::Double,8,8> >*)_desc->opq_seq))[_index]);
  return 1;
}

static void
_0RL_buildDesc_s0_s0_cdouble(tcDescriptor &_desc, const _CORBA_Unbounded_Sequence<_CORBA_Unbounded_Sequence_w_FixSizeElement<CORBA::Double,8,8> >& _data)
{
  _desc.p_sequence.opq_seq = (void*) &_data;
  _desc.p_sequence.setElementCount =
    _0RL_tcParser_setElementCount_s0_s0_cdouble;
  _desc.p_sequence.getElementCount =
    _0RL_tcParser_getElementCount_s0_s0_cdouble;
  _desc.p_sequence.getElementDesc =
    _0RL_tcParser_getElementDesc_s0_s0_cdouble;
}
#endif

#if defined(__0RL_seq_any_s0_s0_cdouble__) && defined(__0RL_seq_anyimpl_Matrix_mrep__)
#undef __0RL_seq_any_s0_s0_cdouble__

void _0RL_seq_anyinsert_Matrix_mrep(CORBA::Any& a, const _CORBA_Unbounded_Sequence<_CORBA_Unbounded_Sequence_w_FixSizeElement<CORBA::Double,8,8> >& s)
{
  tcDescriptor tcdesc;
  _0RL_buildDesc_s0_s0_cdouble(tcdesc, s);
  a.PR_packFrom(Matrix::_tc_rep, &tcdesc);
}

void _0RL_seq_delete_Matrix_mrep(void* data)
{
  delete (Matrix::rep*)data;
}

CORBA::Boolean _0RL_seq_anyextract_Matrix_mrep(const CORBA::Any& a, _CORBA_Unbounded_Sequence<_CORBA_Unbounded_Sequence_w_FixSizeElement<CORBA::Double,8,8> >*& s_out)
{
  s_out = 0;
  Matrix::rep* stmp = (Matrix::rep*) a.PR_getCachedData();
  if( stmp == 0 ) {
    tcDescriptor tcdesc;
    stmp = new Matrix::rep;
    _0RL_buildDesc_s0_s0_cdouble(tcdesc, *stmp);
    if( a.PR_unpackTo(Matrix::_tc_rep, &tcdesc)) {
      ((CORBA::Any*)&a)->PR_setCachedData(stmp, _0RL_seq_delete_Matrix_mrep);
      s_out = stmp;
      return 1;
    } else {
      delete stmp;
      return 0;
    }
  } else {
    CORBA::TypeCode_var tctmp = a.type();
    if( tctmp->equal(Matrix::_tc_rep) ) {
      s_out = stmp;
      return 1;
    } else {
      return 0;
    }
  }
}

#endif

static void
_0RL_tcParser_setObjectPtr_Matrix(tcObjrefDesc *_desc, CORBA::Object_ptr _ptr)
{
  Matrix_ptr _p = Matrix::_narrow(_ptr);
  *((_CORBA_ObjRef_Member<Matrix,Matrix_Helper>*)_desc->opq_objref) = _p;
  CORBA::release(_ptr);
}

static CORBA::Object_ptr
_0RL_tcParser_getObjectPtr_Matrix(tcObjrefDesc *_desc)
{
  return (CORBA::Object_ptr)((_CORBA_ObjRef_Member<Matrix,Matrix_Helper>*)_desc->opq_objref)->_ptr;
}

void _0RL_buildDesc_cMatrix(tcDescriptor& _desc, const _CORBA_ObjRef_Member<Matrix,Matrix_Helper>& _data)
{
  _desc.p_objref.opq_objref = (void*) &_data;
  _desc.p_objref.setObjectPtr = _0RL_tcParser_setObjectPtr_Matrix;
  _desc.p_objref.getObjectPtr = _0RL_tcParser_getObjectPtr_Matrix;
}

void operator<<=(CORBA::Any& _a, Matrix_ptr _s) {
  tcDescriptor _0RL_tcdesc;
  _CORBA_ObjRef_Member<Matrix,Matrix_Helper> _0RL_tmp(_s);
  _0RL_buildDesc_cMatrix(_0RL_tcdesc, _0RL_tmp);
  _a.PR_packFrom(_tc_Matrix, &_0RL_tcdesc);
  _0RL_tmp._ptr = 0;
}

CORBA::Boolean operator>>=(const CORBA::Any& _a, Matrix_ptr& _s) {
  CORBA::TypeCode_var _0RL_any_tc = _a.type();
  tcDescriptor _0RL_tcdesc;
  _CORBA_ObjRef_Member<Matrix,Matrix_Helper> _0RL_tmp;
  _0RL_buildDesc_cMatrix(_0RL_tcdesc, _0RL_tmp);
  if( _a.PR_unpackTo(_tc_Matrix, &_0RL_tcdesc) ) {
    _s = _0RL_tmp._ptr;
    _0RL_tmp._ptr = 0;
    return 1;
  } else {
    _0RL_tmp._ptr = _s = 0;
    return 0;
  }
}

