Ejemplo n.º 1
0
wb_cdef wb_volume::cdef(wb_name n)
{
  pwr_tStatus sts;

  // Look in this volume's meta environment only
  return wb_cdef(m_vrep->merep()->cdrep(&sts, n));
}
Ejemplo n.º 2
0
bool wb_vrepext::createVolumeObject( const char *name)
{
  pwr_tStatus sts;

  wb_cdrep *cdrep = m_merep->cdrep( &sts, m_cid);
  wb_cdef cdef = wb_cdef( cdrep);

  ext_object exto;
  strcpy( exto.m_name, name);
  exto.m_oid.vid = m_vid;
  exto.m_oid.oix = 0;
  exto.m_cid = m_cid;
  exto.m_flags = cdef.flags();
  exto.rbody_size = cdef.size( pwr_eBix_rt);
  if ( exto.rbody_size) {
    exto.rbody = malloc( exto.rbody_size);
    cdef.templateBody( &sts, pwr_eBix_rt, exto.rbody, exto.m_oid);
    if ( EVEN(sts)) return false;
  }
  exto.dbody_size = cdef.size( pwr_eBix_dev);
  if ( exto.dbody_size) {
    exto.dbody = malloc( exto.dbody_size);
    cdef.templateBody( &sts, pwr_eBix_dev, exto.dbody, exto.m_oid);
    if ( EVEN(sts)) return false;
  }

  volume_object = exto;
  strcpy( volume_name, name);
  return true;
}
Ejemplo n.º 3
0
wb_orep *wb_vrepext::object(pwr_tStatus *sts)
{
  vext_sQMsg qmsg;
  vext_sAMsg amsg;

  qmsg.Any.Type = vext_eMsgType_Object;
  put( &qmsg, sizeof(qmsg), sts);
  if ( EVEN(*sts)) return 0;
  receive( &amsg, sizeof(amsg), sts);
  if ( EVEN(*sts)) return 0;

  if ( ODD( amsg.Object.Status)) {
    *sts = LDH__SUCCESS;
    wb_cdrep *cdrep = m_merep->cdrep( sts, amsg.Object.cid);
    wb_cdef cdef = wb_cdef( cdrep);

    ext_object exto( &amsg.Object, m_vid, cdef);
    wb_orepext *orep = new wb_orepext( this, exto);
    return orep;
  }
  else {
    *sts = amsg.Object.Status;
    return 0;
  }
}
Ejemplo n.º 4
0
wb_orep *wb_vrepext::object(pwr_tStatus *sts, wb_name &name)
{
  if ( name.hasVolume() && !name.hasObject()) {
    // Volume object
    *sts = LDH__SUCCESS;
    return new wb_orepext( this, volume_object);
  }

  vext_sQMsg qmsg;
  vext_sAMsg amsg;

  qmsg.ObjectName.Type = vext_eMsgType_ObjectName;
  strcpy( qmsg.ObjectName.Name, name.name(cdh_mName_path | cdh_mName_object));
  put( &qmsg, sizeof(qmsg), sts);
  if ( EVEN(*sts)) return 0;
  receive( &amsg, sizeof(amsg), sts);
  if ( EVEN(*sts)) return 0;

  if ( ODD( amsg.Object.Status)) {
    *sts = LDH__SUCCESS;
    wb_cdrep *cdrep = m_merep->cdrep( sts, amsg.Object.cid);
    wb_cdef cdef = wb_cdef( cdrep);

    ext_object exto( &amsg.Object, m_vid, cdef);
    wb_orepext *orep = new wb_orepext( this, exto);
    return orep;
  }
  else {
    *sts = amsg.Object.Status;
    return 0;
  }
}
Ejemplo n.º 5
0
wb_cdef wb_volume::cdef(wb_object o)
{
  pwr_tStatus sts;
  wb_orep *orep = o;
  wb_cdrep *cdrep;
  try {
    if (orep->vrep() == m_vrep)
      // Object in this volume
      cdrep = m_vrep->merep()->cdrep(&sts, *orep);
    else
      // Object in other volume, get class info from this volume's meta environment
      cdrep = m_vrep->erep()->cdrep(&sts, *orep);
  } catch ( wb_error &e) {
    return wb_cdef();
  }
  return wb_cdef(cdrep);
}
Ejemplo n.º 6
0
size_t wb_object::dbSize()
{
  wb_cdef c = wb_cdef(*m_orep);
  wb_bdef b = c.bdef(pwr_eBix_dev);
  if (!b)
    return 0;

  return b.size();
}
Ejemplo n.º 7
0
size_t wb_object::rbSize()
{
  check();

  wb_cdef c = wb_cdef(*m_orep);
  wb_bdef b = c.bdef(pwr_eBix_rt);
  if (!b)
    return 0;

  return b.size();
}
Ejemplo n.º 8
0
wb_adef wb_volume::adef(pwr_tCid cid, const char *bname, const char *aname)
{
  pwr_tStatus sts;

  wb_cdrep *cdrep = m_vrep->merep()->cdrep(&sts, cid);
  if (EVEN(sts)) return wb_adef();

  wb_cdef cdef = wb_cdef(cdrep);
  wb_bdef bdef = cdef.bdef(bname);
  if (!bdef)
    return wb_adef();
  return bdef.adef(aname);
}
Ejemplo n.º 9
0
wb_orep *wb_vrepext::object(pwr_tStatus *sts, pwr_tOid oid)
{
  if ( oid.vid != m_vid) {
    *sts = LDH__BADOBJID;
    return 0;
  }
  
  if ( oid.oix == 0) {
    // Volume object
    *sts = LDH__SUCCESS;
    return new wb_orepext( this, volume_object);
  }

  // Look in cache
  if ( m_cashe.m_oid.oix == oid.oix) {
    wb_orepext *orep = new wb_orepext( this, m_cashe);
    *sts = LDH__SUCCESS;
    return orep;
  }
    
  vext_sQMsg qmsg;
  vext_sAMsg amsg;

  qmsg.Oid.Type = vext_eMsgType_ObjectOid;
  qmsg.Oid.Oix = oid.oix; 
  put( &qmsg, sizeof(qmsg), sts);
  if ( EVEN(*sts)) return 0;
  receive( &amsg, sizeof(amsg), sts);
  if ( EVEN(*sts)) return 0;

  if ( ODD( amsg.Object.Status)) {
    *sts = LDH__SUCCESS;
    wb_cdrep *cdrep = m_merep->cdrep( sts, amsg.Object.cid);
    wb_cdef cdef = wb_cdef( cdrep);

    ext_object exto( &amsg.Object, m_vid, cdef);
    cashe_insert( exto);
    wb_orepext *orep = new wb_orepext( this, exto);
    return orep;
  }
  else {
    *sts = amsg.Object.Status;
    return 0;
  }
}
Ejemplo n.º 10
0
wb_orep *wb_vrepext::copyObject(pwr_tStatus *sts, const wb_orep *orep, wb_destination &d, 
				wb_name &name, pwr_tOix oix)
{
  if ( d.oid().vid != m_vid || orep->oid().vid != m_vid) {
    *sts = LDH__BADOBJID;
    return 0;
  }
  
  vext_sQMsg qmsg;
  vext_sAMsg amsg;

  qmsg.CopyObject.Oix = orep->oix();
  qmsg.CopyObject.Type = vext_eMsgType_CopyObject;
  qmsg.CopyObject.DestOix = d.oid().oix;
  qmsg.CopyObject.DestType = d.code();
  if ( name)
    strcpy( qmsg.CopyObject.Name, name.object());
  else
    strcpy( qmsg.CopyObject.Name, "");

  put( &qmsg, sizeof(qmsg), sts);
  if ( EVEN(*sts)) return 0;
  receive( &amsg, sizeof(amsg), sts);
  if ( EVEN(*sts)) return 0;

  if ( ODD( amsg.Object.Status)) {
    *sts = LDH__SUCCESS;

    wb_cdrep *cdrep = m_merep->cdrep( sts, amsg.Object.cid);
    wb_cdef cdef = wb_cdef( cdrep);

    ext_object exto( &amsg.Object, m_vid, cdef);
    cashe_insert( exto);
    wb_orepext *orep = new wb_orepext( this, exto);
    return orep;
  }
  else {
    *sts = amsg.Object.Status;
    return 0;
  }
  return 0;
}