/* -*- C++ -*- */
// Multiplexor.i,v 4.0.32.1 1996/10/21 21:41:59 levine Exp

// Multiplexor.i

int 
Driver::link_from_below (ACE_Module *stream_head)
{
  ACE_TRACE ("Driver::link_from_below");
  ACE_Module *stream_tail = this->alloc_module (this);

  stream_head->link (stream_tail);
  if (stream_tail->reader ()->open () == -1
      || stream_tail->writer ()->open () == -1)
    {
      stream_tail->close ();
      return -1;
    }
  return 0;
}

int 
Driver::unlink_from_below (ACE_Module *)
{
  ACE_TRACE ("Driver::unlink_from_below");
  return -1;
}

ACE_Multiplexor::ACE_Multiplexor (void)
{
  ACE_TRACE ("ACE_Multiplexor::ACE_Multiplexor");
}

ACE_Multiplexor::~ACE_Multiplexor (void)
{
  ACE_TRACE ("ACE_Multiplexor::~ACE_Multiplexor");
}

int 
ACE_Multiplexor::link_from_above (Driver &ld)
{
  ACE_TRACE ("ACE_Multiplexor::link_from_above");
  return ld.link_from_below (this->alloc_lower_module (this));
}

int 
ACE_Multiplexor::link_from_above (ACE_Multiplexor &lm)
{
  ACE_TRACE ("ACE_Multiplexor::link_from_above");
  return lm.link_from_below (this->alloc_lower_module (this));
}

int 
ACE_Multiplexor::link_from_below (ACE_Module *stream_head)
{
  ACE_TRACE ("ACE_Multiplexor::link_from_below");
  ACE_Module *stream_tail = this->alloc_upper_module (this);

  stream_head->link (stream_tail);
  if (stream_tail->reader ()->open () == -1
      || stream_tail->writer ()->open () == -1)
    {
      stream_tail->close ();
      return -1;
    }
  return 0;
}

int 
ACE_Multiplexor::unlink_from_above (Driver &)
{
  ACE_TRACE ("ACE_Multiplexor::unlink_from_above");
  return -1;
}

int 
ACE_Multiplexor::unlink_from_above (ACE_Multiplexor &)
{
  ACE_TRACE ("ACE_Multiplexor::unlink_from_above");
  return -1;
}

int 
ACE_Multiplexor::unlink_from_below (ACE_Module *)
{
  ACE_TRACE ("ACE_Multiplexor::unlink_from_below");
  return -1;
}
