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

#ifndef __java_security_cert_PKIXCertPathValidatorResult__
#define __java_security_cert_PKIXCertPathValidatorResult__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace java
  {
    namespace security
    {
        class PublicKey;
      namespace cert
      {
          class PKIXCertPathValidatorResult;
          class PolicyNode;
          class TrustAnchor;
      }
    }
  }
}

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

public:
  PKIXCertPathValidatorResult(::java::security::cert::TrustAnchor *, ::java::security::cert::PolicyNode *, ::java::security::PublicKey *);
  virtual ::java::security::cert::TrustAnchor * getTrustAnchor();
  virtual ::java::security::cert::PolicyNode * getPolicyTree();
  virtual ::java::security::PublicKey * getPublicKey();
  virtual ::java::lang::Object * clone();
  virtual ::java::lang::String * toString();
private:
  ::java::security::cert::TrustAnchor * __attribute__((aligned(__alignof__( ::java::lang::Object)))) trustAnchor;
  ::java::security::cert::PolicyNode * policyTree;
  ::java::security::PublicKey * subjectPublicKey;
public:
  static ::java::lang::Class class$;
};

#endif // __java_security_cert_PKIXCertPathValidatorResult__
