/* 
   objref.c
   Object Reference objects

   Datablk is a library that provides a "typeless" type for
   programmable systems.

   (C) Copyright 1999 by Nicholas Rusnov
*/

#include <stdlib.h>
#include <stdio.h>
#include <memory.h>

#include "flags.h"
#include "datablk.h"

Datablk *dblk_mkobr(const DBLK_ObRef *aobr)
{
  return dblk_mkgenobr(aobr->Domain,aobr->Object);
}

Datablk *dblk_mkgenobr(const int Domain, const int Object)
{
  DBLK_ObRef *myobr;
  Datablk *myblk;

  DBLK_INIT_OBR(myobr,Domain,Object);
  DBLK_INIT(myblk, DBLK_T_OBJR);
  myblk->Data=myobr;
  return myblk;
}

int dblk_getobr(DBLK_ObRef *aobr, const Datablk *ablk)
{
  if (ablk && aobr && (DBLK_ObRef *)ablk->Data && (ablk->type == DBLK_T_OBJR))
    {
      DBLK_CLONE_OBR(aobr,((DBLK_ObRef *)ablk->Data));
    }
  else
    return -1;
  return 0;
}

int dblk_setobr(const DBLK_ObRef *aobr, Datablk *ablk)
{
  if (aobr)
    dblk_setgenobr(aobr->Domain,aobr->Object,ablk);
  else
    dblk_setgenobr(0,0,ablk);
}

int dblk_setgenobr(const int Domain, const int Object, Datablk *ablk)
{
  if (ablk)
    {
      if (ablk->Data)
	dblk_nullify(ablk);

      DBLK_INIT_OBR(((DBLK_ObRef *)ablk->Data),Domain,Object);

      ablk->type=DBLK_T_OBJR;     
    }
}


