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

#ifndef __java_security_AlgorithmParameterGenerator__
#define __java_security_AlgorithmParameterGenerator__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace java
  {
    namespace security
    {
        class AlgorithmParameterGenerator;
        class AlgorithmParameterGeneratorSpi;
        class AlgorithmParameters;
        class Provider;
        class SecureRandom;
      namespace spec
      {
          class AlgorithmParameterSpec;
      }
    }
  }
}

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

public: // actually protected
  AlgorithmParameterGenerator(::java::security::AlgorithmParameterGeneratorSpi *, ::java::security::Provider *, ::java::lang::String *);
public:
  virtual ::java::lang::String * getAlgorithm();
  static ::java::security::AlgorithmParameterGenerator * getInstance(::java::lang::String *);
  static ::java::security::AlgorithmParameterGenerator * getInstance(::java::lang::String *, ::java::lang::String *);
  static ::java::security::AlgorithmParameterGenerator * getInstance(::java::lang::String *, ::java::security::Provider *);
  virtual ::java::security::Provider * getProvider();
  virtual void init(jint);
  virtual void init(jint, ::java::security::SecureRandom *);
  virtual void init(::java::security::spec::AlgorithmParameterSpec *);
  virtual void init(::java::security::spec::AlgorithmParameterSpec *, ::java::security::SecureRandom *);
  virtual ::java::security::AlgorithmParameters * generateParameters();
private:
  static ::java::lang::String * ALGORITHM_PARAMETER_GENERATOR;
  ::java::security::AlgorithmParameterGeneratorSpi * __attribute__((aligned(__alignof__( ::java::lang::Object)))) paramGenSpi;
  ::java::security::Provider * provider;
  ::java::lang::String * algorithm;
public:
  static ::java::lang::Class class$;
};

#endif // __java_security_AlgorithmParameterGenerator__
