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

#ifndef __java_util_logging_StreamHandler__
#define __java_util_logging_StreamHandler__

#pragma interface

#include <java/util/logging/Handler.h>

class java::util::logging::StreamHandler : public ::java::util::logging::Handler
{

public:
  StreamHandler();
  StreamHandler(::java::io::OutputStream *, ::java::util::logging::Formatter *);
public: // actually package-private
  StreamHandler(::java::io::OutputStream *, ::java::lang::String *, ::java::util::logging::Level *, ::java::util::logging::Formatter *, ::java::lang::Class *);
private:
  void checkOpen();
  void checkFresh();
  void changeWriter(::java::io::OutputStream *, ::java::lang::String *);
public:
  virtual void setEncoding(::java::lang::String *);
public: // actually protected
  virtual void setOutputStream(::java::io::OutputStream *);
public:
  virtual void publish(::java::util::logging::LogRecord *);
  virtual jboolean isLoggable(::java::util::logging::LogRecord *);
  virtual void flush();
  virtual void close();
private:
  ::java::io::OutputStream * __attribute__((aligned(__alignof__( ::java::util::logging::Handler)))) out;
  ::java::io::Writer * writer;
  jint streamState;
  static const jint STATE_FRESH = 0;
  static const jint STATE_PUBLISHED = 1;
  static const jint STATE_CLOSED = 2;
public:
  static ::java::lang::Class class$;
};

#endif // __java_util_logging_StreamHandler__
