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

#ifndef __gnu_javax_crypto_sasl_OutputBuffer__
#define __gnu_javax_crypto_sasl_OutputBuffer__

#pragma interface

#include <java/lang/Object.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace javax
    {
      namespace crypto
      {
        namespace sasl
        {
            class OutputBuffer;
        }
      }
    }
  }
  namespace java
  {
    namespace math
    {
        class BigInteger;
    }
  }
}

class gnu::javax::crypto::sasl::OutputBuffer : public ::java::lang::Object
{

public:
  OutputBuffer();
  virtual void setScalar(jint, jint);
  virtual void setOS(JArray< jbyte > *);
  virtual void setEOS(JArray< jbyte > *);
  virtual void setMPI(::java::math::BigInteger *);
  virtual void setText(::java::lang::String *);
  virtual JArray< jbyte > * encode();
  virtual JArray< jbyte > * wrap();
private:
  ::java::io::ByteArrayOutputStream * __attribute__((aligned(__alignof__( ::java::lang::Object)))) out;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_javax_crypto_sasl_OutputBuffer__
