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

#ifndef __java_security_cert_CertPathBuilder__
#define __java_security_cert_CertPathBuilder__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace java
  {
    namespace security
    {
        class Provider;
      namespace cert
      {
          class CertPathBuilder;
          class CertPathBuilderResult;
          class CertPathBuilderSpi;
          class CertPathParameters;
      }
    }
  }
}

class java::security::cert::CertPathBuilder : public ::java::lang::Object
{

public: // actually protected
  CertPathBuilder(::java::security::cert::CertPathBuilderSpi *, ::java::security::Provider *, ::java::lang::String *);
public:
  static ::java::lang::String * getDefaultType();
  static ::java::security::cert::CertPathBuilder * getInstance(::java::lang::String *);
  static ::java::security::cert::CertPathBuilder * getInstance(::java::lang::String *, ::java::lang::String *);
  static ::java::security::cert::CertPathBuilder * getInstance(::java::lang::String *, ::java::security::Provider *);
  virtual ::java::lang::String * getAlgorithm();
  virtual ::java::security::Provider * getProvider();
  virtual ::java::security::cert::CertPathBuilderResult * build(::java::security::cert::CertPathParameters *);
private:
  static ::java::lang::String * CERT_PATH_BUILDER;
  ::java::security::cert::CertPathBuilderSpi * __attribute__((aligned(__alignof__( ::java::lang::Object)))) cpbSpi;
  ::java::security::Provider * provider;
  ::java::lang::String * algorithm;
public:
  static ::java::lang::Class class$;
};

#endif // __java_security_cert_CertPathBuilder__
