
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-

#ifndef __javax_sound_sampled_LineEvent__
#define __javax_sound_sampled_LineEvent__

#pragma interface

#include <java/util/EventObject.h>
extern "Java"
{
  namespace javax
  {
    namespace sound
    {
      namespace sampled
      {
          class Line;
          class LineEvent;
          class LineEvent$Type;
      }
    }
  }
}

class javax::sound::sampled::LineEvent : public ::java::util::EventObject
{

public:
  LineEvent(::javax::sound::sampled::Line *, ::javax::sound::sampled::LineEvent$Type *, jlong);
  virtual jlong getFramePosition();
  virtual ::javax::sound::sampled::Line * getLine();
  virtual ::javax::sound::sampled::LineEvent$Type * getType();
  virtual ::java::lang::String * toString();
private:
  void readObject(::java::io::ObjectInputStream *);
  void writeObject(::java::io::ObjectOutputStream *);
  static const jlong serialVersionUID = -1274246333383880410LL;
  ::javax::sound::sampled::LineEvent$Type * __attribute__((aligned(__alignof__( ::java::util::EventObject)))) type;
  jlong framePosition;
  ::javax::sound::sampled::Line * line;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_sound_sampled_LineEvent__
