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

#ifndef __java_security_AlgorithmParameters__
#define __java_security_AlgorithmParameters__

#pragma interface

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

extern "Java"
{
  namespace java
  {
    namespace security
    {
        class AlgorithmParameters;
        class AlgorithmParametersSpi;
        class Provider;
      namespace spec
      {
          class AlgorithmParameterSpec;
      }
    }
  }
}

class java::security::AlgorithmParameters : public ::java::lang::Object
{

public: // actually protected
  AlgorithmParameters(::java::security::AlgorithmParametersSpi *, ::java::security::Provider *, ::java::lang::String *);
public:
  virtual ::java::lang::String * getAlgorithm();
  static ::java::security::AlgorithmParameters * getInstance(::java::lang::String *);
  static ::java::security::AlgorithmParameters * getInstance(::java::lang::String *, ::java::lang::String *);
  static ::java::security::AlgorithmParameters * getInstance(::java::lang::String *, ::java::security::Provider *);
  virtual ::java::security::Provider * getProvider();
  virtual void init(::java::security::spec::AlgorithmParameterSpec *);
  virtual void init(JArray< jbyte > *);
  virtual void init(JArray< jbyte > *, ::java::lang::String *);
  virtual ::java::security::spec::AlgorithmParameterSpec * getParameterSpec(::java::lang::Class *);
  virtual JArray< jbyte > * getEncoded();
  virtual JArray< jbyte > * getEncoded(::java::lang::String *);
  virtual ::java::lang::String * toString();
private:
  static ::java::lang::String * ALGORITHM_PARAMETERS;
  ::java::security::AlgorithmParametersSpi * __attribute__((aligned(__alignof__( ::java::lang::Object)))) paramSpi;
  ::java::security::Provider * provider;
  ::java::lang::String * algorithm;
public:
  static ::java::lang::Class class$;
};

#endif // __java_security_AlgorithmParameters__
