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

#ifndef __java_rmi_server_LogStream__
#define __java_rmi_server_LogStream__

#pragma interface

#include <java/io/PrintStream.h>
#include <gcj/array.h>

extern "Java"
{
  namespace java
  {
    namespace rmi
    {
      namespace server
      {
          class LogStream;
      }
    }
  }
}

class java::rmi::server::LogStream : public ::java::io::PrintStream
{

  LogStream(::java::io::OutputStream *);
public:
  static ::java::rmi::server::LogStream * log(::java::lang::String *);
  static ::java::io::PrintStream * getDefaultStream();
  static void setDefaultStream(::java::io::PrintStream *);
  virtual ::java::io::OutputStream * getOutputStream();
  virtual void setOutputStream(::java::io::OutputStream *);
  virtual void write(jint);
  virtual void write(JArray< jbyte > *, jint, jint);
  virtual ::java::lang::String * toString();
  static jint parseLevel(::java::lang::String *);
  static const jint SILENT = 0;
  static const jint BRIEF = 10;
  static const jint VERBOSE = 20;
private:
  static ::java::io::PrintStream * defStream;
public:
  static ::java::lang::Class class$;
};

#endif // __java_rmi_server_LogStream__
