package com.highqsoft.avalonCorbaNotification.notification;

/**
* com/highqsoft/avalonCorbaNotification/notification/AvalonNotificationCorbaEventHolder.java .
* Generated by the IDL-to-Java compiler (portable), version "3.2"
* from src/main/idl/AvalonEvent.idl
* Freitag, 5. August 2016 09:43 Uhr MESZ
*/

public final class AvalonNotificationCorbaEventHolder implements org.omg.CORBA.portable.Streamable
{
  public com.highqsoft.avalonCorbaNotification.notification.AvalonNotificationCorbaEvent value = null;

  public AvalonNotificationCorbaEventHolder ()
  {
  }

  public AvalonNotificationCorbaEventHolder (com.highqsoft.avalonCorbaNotification.notification.AvalonNotificationCorbaEvent initialValue)
  {
    value = initialValue;
  }

  public void _read (org.omg.CORBA.portable.InputStream i)
  {
    value = com.highqsoft.avalonCorbaNotification.notification.AvalonNotificationCorbaEventHelper.read (i);
  }

  public void _write (org.omg.CORBA.portable.OutputStream o)
  {
    com.highqsoft.avalonCorbaNotification.notification.AvalonNotificationCorbaEventHelper.write (o, value);
  }

  public org.omg.CORBA.TypeCode _type ()
  {
    return com.highqsoft.avalonCorbaNotification.notification.AvalonNotificationCorbaEventHelper.type ();
  }

}
